私はサンプルを持っています:
This is a test
localhost% This is a test
最初のエントリはThis is a test
次の行のtxtファイルに再び現れ、localhost%
その前にいくつかの文字があります。This is a test
次の行に次の内容が含まれている場合は、最初の行を削除したいと思います。<arbitrary characters>% This is a test
だから、2つの行をチェックし、前の行が次のThis is a test
行と一致する場合localhost% This is a test
(注%
)、前の行を削除したいと思います。
どうすればいいですか?
答え1
おそらく:
sed '$!N;/^\(.*\)\n.*% \1$/!P;D'
つまり、withを使用してsed
スクロール2行パターン空間を処理することによって、()の後の2行目の最後に最初の行が見つかる(キャプチャ)、最初の行が削除されます(印刷せずにスキップ())。それ)。N
D
!
P
\(...\)
\1
$
"% "
これは次のような場合にも機能します。
This is a test foo% This is a test bar% foo% This is a test
(最初の2行削除)
答え2
次のコマンドを使用できます
sed -i "/This is a test/s/^This is a test$//g" test && sed -i '/^$/d' test
入力ファイル
猫テスト
This is a test
localhost% This is a test
上記のコマンドを実行した後
結果ファイル
猫テスト
localhost% This is a test