2016-12-02 6 views
0

私のスクリプトの1つ私は2つのパターンの間にテキストを印刷する必要があります一致が一致する場合、私はそれを簡単にする方法を見つける。2つのパターンの間にテキストを印刷

ファイルの内容は次のとおりです。

===== seble dom0 report ===== 
IP address: 10.42.0.100 
location: slot-3.enclosure-43.eqx 
ID: infra-dom0.dom0.seble 
Xen-Version: 4.4 
CPU: Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz 

===== arnica dom0 report ===== 
IP address: 10.1.42.46 
location: slot-3.enclosure-12.eqx 
ID: infra-dom0.dom0-3 
Xen-Version: 4.1 
CPU: AMD Opteron(tm) Processor 6174 

===== sithtemd dom0 report ===== 
IP address: 10.1.42.191 
location: slot-13.enclosure-7.vty 
ID: infra-dom0.mutu119 
Xen-Version: 4.4 
CPU: Intel(R) Xeon(R) CPU X5670 @ 2.93GHz 

私はさがすエンクロージャ-7 exempleのため、私はそれを返したい場合:

===== sithtemd dom0 report ===== 
IP address: 10.1.42.191 
location: slot-13.enclosure-7.vty 
ID: infra-dom0.mutu119 
Xen-Version: 4.4 
CPU: Intel(R) Xeon(R) CPU X5670 @ 2.93GHz 

それはグレップとsed -n "/===== /,/^$/p"のミックスだがすることができますそれを見つけることは...

お返事ありがとうございます:

+0

いつでもあなたは 'grepの間のミックスを考慮しこれが答えですおよびsed(登録商標)または他のテキスト処理ツールの組み合わせを使用する場合、より良いアプローチほとんどの場合awkを使うだけです。アーノルド・ロビンズ(Arnold Robbins)著、Effective Awk Programming、第4版からawkを学ぶことができます。 –

答えて

1

perl -0777 -lne 'print for grep /enclosure-7/, /^=====.*?^$.*?\n/mgs' file.txt 
1
+1

または単に 'awk -v RS = '/ enclosure-7 /' file.dat'です。変数を使って複雑にする必要はありません。 'awk -v RS = -v ORS = '\ n \ n' '/ enclosure-7 /' file.datのように複数の一致がある場合には、出力にブランク行で区切られた形式を複製するのが良いでしょう。 ' –

0

として扱われます:

sed '/^=====/{:a;N;/\n$/!ba;/enclosure-7/!d}' file 
関連する問題