文字列の一部を一致させ、文字列全体を印刷します。

文字列の一部を一致させ、文字列全体を印刷します。

私のUbuntuシステムのコマンドは次の出力を印刷し、それを$problem_dbs変数に保存します。

tacservices/e43ccb05-5b0a-4403-950b-9c91ed3f3694 unresponsive agent z1 10.213.197.77 tac-nightly-test tacservices/54be8202-2304-462e-8574-1aef379160d9 failing z1 10.213.204.228 tac-Trip-test

'tac-*'で始まる文字列を検索して印刷したいです。

tac-nightly-test
tac-Trip-test

私は試した:

echo $problem_dbs | sed -n -e 's/^.*\(tac-\)/\1/p'

しかし印刷のみですtac-Trip-test

私は何を逃したことがありませんか?

ベストアンサー1

あなたのawkバージョンが改行なしで入力をサポートしている場合(私が知っている限り)、必要なものは次のとおりです。

printf '%s' "$problem_dbs" | awk -v RS=' ' '/^tac-/'
tac-nightly-test
tac-Trip-test

それ以外の場合は、複数文字のRS合計にGNU awkを使用してください\s

awk -v RS='\\s' '/^tac-/'

または、任意のawkを使用します(質問のように1行の入力があり、tac-1行の末尾に文字列を含む複数行の入力がなく、次の行の先頭にすぐに再入力されないと仮定します)。

awk -v RS=' ' '{sub(/\n/,"")} /^tac-/'

おすすめ記事