2016-09-29 16 views
1

2番目の一致が最初に出現するまで最初の一致を含むすべての行を印刷しようとしています最初の試合。最初のパターンと2番目のパターンの間に行を印刷するときに2番目のパターンが最初のパターンの上と下に現れる

私が持っているファイルは、以下のように空行で区切られたレコードが含まれてい

host  host1 
key1  value 
key2  value 
key3  value 

host  host2 
key1  value 
key2  value 
key3  value 
key4  value 
key5  value 

host  host3 
key1  value 
key2  **aaaa** 
key3  value 

host  host3 
key1  value 
key2  value 

のは、私の検索パターンが「AAAA」であるとしましょう。空の行まで最初の一致の上の行を "aaaa"に、空の行までの最初の一致の下の行を "aaaa"に出力したい。だから、検索が出力する必要があります。各レコードはラインの異なる数が含まれていますので、

host  host3 
key1  value 
key2  aaaa 
key3  value 

私はグレップを使用することはできません。

答えて

0
$ awk -v RS= '/aaaa/' file 
host  host3 
key1  value 
key2  **aaaa** 
key3  value 
+0

ありがとうございます.... ....複数の一致がある場合、レコード間に空白行を追加するにはどうすればよいですか? – user6901586

+0

もう1つ、RSの大文字小文字を区別しないようにするにはどうすればいいですか? – user6901586

+0

出力レコード間に空白行を表示するには、 '-v ORS = '\ n \ n"を追加します.RSは空のため、大文字と小文字は区別されません。 –

0

私は答えを見つけたと思います。それはあなたが期待する出力を生成しますが、それは不必要gawkは固有のだによるマルチchar型のRSに、不要な入力のリダイレクトを使用して、

awk 'BEGIN{ RS="\n\n"; FS="\n"; } /aaaa/ {print}' << inputfile 
+0

:同様のソリューションを探している人のために、あなたは以下のawkを使用することができますFSを何の理由もないように設定し、重複してデフォルトの動作を指定します。適切なアプローチについては、http://stackoverflow.com/a/39783262/1745001を参照してください。 –

関連する問題