1行目に文字列が最初に表示された後のすべての行を削除します。

1行目に文字列が最初に表示された後のすべての行を削除します。

test.txt次の例のように大きなファイルがあります。

foo
before ...
before some line 
foo something interesting bar
after some lines
after ...
bar

something interestingsed文字列 ""が最初に表示される前の行のみを含めるか、同じ基本bashコマンドを使用して新しいファイルを生成するにはどうすればよいですか?grep(いいえawk、awkのない内蔵デバイスでこのコマンドを使用する必要があります。)

答え1

sed '/something interesting/,$d' < file > newfile

次のように最適化できます。

sed -n '/something interesting/q;p' < file > newfile

sedパターンが見つかったらすぐに終了します。

sed@RakeshSharmaが指摘したように、GNUを使用すると、実装を次のように単純化できます。

sed '/something interesting/Q' < file > newfile

ksh93代わりに を使用してファイルを切り捨てるには、bash次のようにします。

printf '' <>; file >#'*something interesting*'
  • <>;標準の<>リダイレクト演算子(読み取り+書き込み用に開く)に似ていますが、コマンドが成功するとファイルの末尾が切り捨てられます。
  • <#patternパターンに一致する次の行の先頭を探します。

(stdout(少なくともksh93u +では)では機能しているようですが、またはprintf ''などの他の組み込みコマンドでは機能しないことに注意してください。true:eval間違い。そしてスクリプトの最後のコマンドにすることはできません(別のエラー)).

関連情報