2つのパターン間の線を削除[重複]

2つのパターン間の線を削除[重複]

重複の可能性:
一致する2つのパターンの間のテキストのみを表示

Bashスクリプトからsed埋め込み(または含まれていない)コンテンツで始まり終わる行ブロックを削除するにはどうすればよいですか?-pattern a--pattern b--pattern c--pattern c-

だから:

line 1 -pattern a-  
line 2   
line 3 -pattern b-  
line 4 -pattern a-   
line 5 -pattern c-  
line 6 -pattern b-

この例では、4行、5行、6行(または含まれていない1行、2行、3行)を削除しようとしています-pattern c-

答え1

常に3つの連続した行があると仮定すると、次のことができます。

# Print with pattern c
awk 'NR % 3 !=0 {printf $0;printf "|"} NR % 3 ==0 {printf $0; print " "}' file.txt | grep "\-pattern\ c\-" | sed 's/|/\n/g'

# Print without pattern c
awk 'NR % 3 !=0 {printf $0;printf "|"} NR % 3 ==0 {printf $0; print " "}' file.txt | grep -v "\-pattern\ c\-" | sed 's/|/\n/g'

関連情報