ファイルからテキストを検索し、そのテキストを含む段落を表示するにはどうすればよいですか?

ファイルからテキストを検索し、そのテキストを含む段落を表示するにはどうすればよいですか?

ファイルのテキストは次のとおりです。

Pseudo name=Apple
Code=42B
state=fault

Pseudo name=Prance
Code=43B
state=good

「42B」をgrepし、上記のテキストから出力を取得する必要があります。たとえば、次のようになります。

Pseudo name=Apple
Code=42B
state=fault

これをgrep達成するために//を使用する方法を知っている人はいますか?awksed

ベストアンサー1

そしてawk

awk -v RS='' '/42B/' file

RS=入力レコード区切り文字を改行から空行に変更します。レコードのフィールドにが含まれている場合は、/42B/レコードを印刷します。

''(空の文字列)は、空行を表すために使用されるマジック値です。POSIXによると:

もしRSが空の場合、レコードは1つ以上の空行で構成されるシーケンスに分割されます<newline>。先頭または末尾の空行は、入力の先頭または末尾に空のレコードにしてはいけません。aは<newline>常にフィールド区切り文字でなければなりません。どんな価値でもFSはい。

出力区切り文字は依然として単一の改行文字であるため、出力段落は区別されません。出力段落の間に空白行があることを確認するには、出力レコード区切り文字を2つの改行に設定します。

awk -v RS='' -v ORS='\n\n' '/42B/' file

おすすめ記事