最初の一致後に行を削除します

Dec 31 2020

「fox」という単語を含む最初の行の後のすべての行を削除する必要があります

たとえば、次の入力ファイル「in.txt」について説明します。

The quick
brown fox jumps
over
the
lazy dog
the second fox
is hunting

結果は次のようになります

The quick
brown fox jumps

私はawkまたはsedで作成されたスクリプトを好みますが、perl、php、pythonなどの他のコマンドラインツールも適しています。

検索の目的で、次の行を追加します。

発生後に行を削除する

後で編集:

私はWindowsでgnuwin32ツールを使用していますが、見つけた解決策は次のとおりです。

grep -m1 -n fox in.txt | cut -f1 -d":" > var.txt
set /p MyNumber=<var.txt
head -%MyNumber% in.txt > out.txt

しかし、私はより短く、移植性のあるソリューションを探しています(これにはWindows固有のコマンド「set / p」が含まれています

同様の質問:

  • パターンが最後に発生した後、すべての行を削除するにはどうすればよいですか?

  • それを保持する試合の前に行を削除するにはどうすればよいですか?

  • sedと一致する前にすべての行を削除します

  • sedを使用してパターン「[ERROR] -17-12-2015」に遭遇する前に、1行目から行までの行を削除するにはどうすればよいですか?

  • 文字列の最初と最後の出現の前と後のすべての行を削除するにはどうすればよいですか?

回答

3 Cyrus Dec 31 2020 at 03:59
awk '{print} /fox/{exit}' file

GNU sedの場合:

sed '0,/fox/!d' file

または

sed -n '0,/fox/p' file