とsed:
sed '$!N;/remove/!P;D' infile
これは、プルNのextパターンスペースに行(いない場合は!ラ上の$パターンスペースが一致する場合トンライン)とチェックをremove。含まれていない場合(パターンスペースの2行に文字列が含まれていないことを意味しますremove)P、最初の\newline文字までリントします(つまり、最初の行を印刷します)。次にD、最初の\newline文字まで削除し、サイクルを再開します。このように、パターンスペースには2行を超える行はありません。
それは理解することは、おそらく簡単ですN、P、Dあなたが追加した場合、サイクルをl前後にNパターンスペースを見て:
sed 'l;$!N;l;/remove/!P;D' infile
したがって、例の最後の6行のみを使用します。
8AC3
remove
8AE4
8AE5
8AE6
remove
最後のコマンドの出力:
8AC3 $
8AC3 \ n削除$
削除$
削除\ n 8AE4 $
8AE4 $
8AE4 \ n 8AE5 $
8AE4
8AE5 $
8AE5 \ n 8AE6 $
8AE5
8AE6 $
8AE6 \ n削除$
削除$
削除$
ここに簡単な説明があります:
cmd出力cmd
l 8AC3$ N # read in the next line
l 8AC3\n remove$ D # delete up to \n (pattern space matches so no P)
l remove$ N # read in the next line
l remove\n 8AE4$ D # delete up to \n (pattern space matches so no P)
l 8AE4$ N # read in the next line
l 8AE4\n 8AE5$ # pattern space doesn't match so print up to \n
P 8AE4 D # delete up to \n
l 8AE5$ N # read in the next line
l 8AE5\n 8AE6$ # pattern space doesn't match so print up to \n
P 8AE5 D # delete up to \n
l 8AE6$ N # read in the next line
l 8AE6\n remove$ D # delete up to \n (pattern space matches so no P)
l remove$ # last line so no N
l remove$ D # delete (pattern space matches so no P)