test.txt
次の例のように大きなファイルがあります。
foo
before ...
before some line
foo something interesting bar
after some lines
after ...
bar
something interesting
sed
文字列 ""が最初に表示される前の行のみを含めるか、同じ基本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
間違い。そしてスクリプトの最後のコマンドにすることはできません(別のエラー)).