Почему мой сценарий sed не возвращает ожидаемые данные? - PullRequest
0 голосов
/ 15 февраля 2019

Я написал скрипт sed для извлечения значения поля из многострочного вывода команды, но он не работает, и я не вижу, что не так.

$ cf target | sed -e 's/space:\s+\(\S+\).*/\1/p'
api endpoint:   https://api.sys.gn01.pcf.my.com
api version:    2.112.0
user:           userid
org:            cart-creation
space:          stage

Я ожидаю увидеть значение stage, но когда я использую опцию -n, я не вижу никакого вывода вообще.Я вынул -n выше, чтобы показать, как выглядит вывод моей команды.

1 Ответ

0 голосов
/ 16 февраля 2019

Вы получили разумный awk-ответ в комментариях, но вместо этого рассмотрите этот подход:

$ awk '{t=$0; sub(/:.*/,"",t); sub(/^[^:]+:[[:space:]]*/,""); f[t]=$0} END{print f["space"]}' file
stage

$ awk '{t=$0; sub(/:.*/,"",t); sub(/^[^:]+:[[:space:]]*/,""); f[t]=$0} END{print f["api version"]}' file
2.112.0

$ awk '{t=$0; sub(/:.*/,"",t); sub(/^[^:]+:[[:space:]]*/,""); f[t]=$0}
    END{print f["space"], f["org"], f["api version"]}' file
stage cart-creation 2.112.0

$ awk -v n='space' '{t=$0; sub(/:.*/,"",t); sub(/^[^:]+:[[:space:]]*/,""); f[t]=$0} END{print f[n]}' file
stage

, поскольку он позволяет вам печатать любые значения в любом порядке по их имени.

...