「pattern2」が最後に表示された後、最初に「pattern1」が表示された行を削除しますか?

「pattern2」が最後に表示された後、最初に「pattern1」が表示された行を削除しますか?

次のファイルがあります。

ブラブラ
パターン 2
ブラ
パターン 1
パターン 2
ブラ
ブラ パターン 1 ブラ
ブラー
パターン1

pattern1最後の一致から最初の項目を含む太字の行全体を削除したいと思いますpattern2

誰にもアイデアがありますか?

ありがとうございます!

ベストアンサー1

これは1つのexライナーです。 (ex前作とスクリプト形式ではそうですvi。)

printf '%s\n' '$?pattern2?/pattern1/d' x | ex file.txt

保存xと終了。%p変更したファイルのみを印刷したい場合は、次のように変更してください。いいえ変更を保存します(テストに適しています)。

$はファイルの最後の行を表し、は現在の位置から始まり、?pattern2?逆方向検索の最初の結果を表すアドレス、は行削除コマンドです。pattern2/pattern1/d

ex順方向および逆方向アドレス指定が必要な場合に使用します。


viVimでも同じことを対話的に実行できます。

vim file.txt

その後、入力してください。

:$?pattern2?/pattern1/d

そしてEnterを押します。

その後、保存して:xEnterを押して終了します。

おすすめ記事