ファイルのテキストは次のとおりです。
Pseudo name=Apple
Code=42B
state=fault
Pseudo name=Prance
Code=43B
state=good
「42B」をgrepし、上記のテキストから出力を取得する必要があります。たとえば、次のようになります。
Pseudo name=Apple
Code=42B
state=fault
これをgrep
達成するために//を使用する方法を知っている人はいますか?awk
sed
ベストアンサー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