ファイル内の文字列を見つけて、bashを使用して他の文字列を含む上記の最初の行を見つけます。

ファイル内の文字列を見つけて、bashを使用して他の文字列を含む上記の最初の行を見つけます。

ファイル内の文字列を検索し、その前に「srv」を含む行の最初のインスタンスを見つけるにはどうすればよいですか?

私はTacとsedを調べてきましたが、うまくいきませんでした。

検索する出力ファイルは次のとおりです。

srv-test-1 | SUCCESS | rc=0 >>
a1
A3
srv-test-2 | SUCCESS | rc=0 >>
a1
b1
b2
B3
B4

コードは、ユーザーが探している文字列を尋ねるメッセージを表示し、それを変数に保存します。

以下を使用してユーザー要求を見つけることができます。

tac file | grep $requested

ユーザーがb1を要求したときに返されることを望みます。

b1 found on srv-test-2

同様に、a1 が要求されると返されます。

a1 found on srv-test-1
a1 found on srv-test-2

ベストアンサー1

複数のアイテムを検索する場合は、ファイル全体をgrep可能なアイテムのリストに変換できます。

awk '/^srv/ { c = $1 ; next } { print $0 " found on " c }'

入力ファイルは以下を提供します。

a1 found on srv-test-1
A3 found on srv-test-1
a1 found on srv-test-2
b1 found on srv-test-2
b2 found on srv-test-2
B3 found on srv-test-2
B4 found on srv-test-2

その後、単一の項目を検索するには、前の出力をフィルタリングできます。

awk '/^srv/ { c = $1 ; next } { print $0 " found on " c }' | grep '^a1'

与える

a1 found on srv-test-1
a1 found on srv-test-2

おすすめ記事