とsed
:
sed '$!N;/remove/!P;D' infile
これは、プルN
のextパターンスペースに行(いない場合は!
ラ上の$
パターンスペースが一致する場合トンライン)とチェックをremove
。含まれていない場合(パターンスペースの2行に文字列が含まれていないことを意味しますremove
)P
、最初の\n
ewline文字までリントします(つまり、最初の行を印刷します)。次にD
、最初の\n
ewline文字まで削除し、サイクルを再開します。このように、パターンスペースには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)