次の行にも内容がある場合は、その行を削除してください。

次の行にも内容がある場合は、その行を削除してください。

私はサンプルを持っています:

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行目の最後に最初の行が見つかる(キャプチャ)、最初の行が削除されます(印刷せずにスキップ())。それ)。ND!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

関連情報