2017-11-24 19 views
0

マイ入力印刷ラインの範囲彼らはパターンに一致する場合

1 
abc 

1cde 
efg 
xxx 

1 
abc 
pattern1 
pattern2 

efg 
xxx 

1 
abc 
cde 
efg 
xxx 

私の予想出力(1から印刷することはパターン1と2が含まれています):

1 
abc 
pattern1 
pattern2 

efg 
xxx 

私は持っているために:

sed -n '/^1/ {x;/pattern1/ {N;/\n.*pattern2/p};d} $/^1/ {h;/pattern1/ {N;/\n.*pattern2/p};d}}H' My file 

私のファイルは非常に大きなファイルですので、すぐにそれを行う方法を教えてください。 ありがとうございます。

+0

投稿されたサンプル入力からその出力を取得する方法や、投稿された入力から投稿出力を取得できない場合の例を修正する方法を説明します。 –

答えて

3

sedはs/old/new/です - それはすべてです。他にはawkを使うべきです。

我々はに対してテストするための具体的な何かを持っていませんが、あなたが望むかもしれないように聞こえるので、それを推測し、未検証ですので、ご期待出力は実際にあなたのサンプルの入力から生成することができないように見えます:

awk -v RS= -v ORS='\n\n' '/pattern1/ && /pattern2/' file 
0

@Edモートン これは正しい入力された:行の範囲を印刷する必要がある

1 
abc 
1cde 
efg 

xxx 

1 
abc 

pattern1 
pattenr2 
efg 
xxx 

1 
abc 
1cde 

efg 
xxx 

は、(「^ 1 $」によって決定され、次の「1」または終了前の行にライン「1」で始まりますファイル)

私はこれを試しましたが、動作していません。

関連する問題