私の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-/'