このフォーラムでは、テキストファイル内のさまざまな値を見つけ、それを囲むテキストを出力することに関連する多くの投稿を見つけています。ただし、「ストリーム指向」は見当たらないようです。
ファイル内の特定の文字列を検索し、ファイルの終わりに達するまで、それに続くテキストを出力onlyしたい。つまり、特定の文字列値に到達するまでファイル内のテキストを無視し、その時点からstdoutにテキストを出力するまで、フィルターのように動作するものが欲しいのです。ファイルの終わり。 stdoutを使用したいので、必要に応じて出力をファイルにパイプすることができます。
これを行うのに役立つLinuxテキストユーティリティはありますか?または、それを実行するためにbashシェルスクリプトを記述する必要がある場合、これを行うために使用する一般的な手順とコマンドラインユーティリティは何ですか?
たとえば、以下のサンプルファイルがあるとします。
one
two
three
four
five
「3」の後のすべてのテキストを出力したいので、結果は次のようになります。
four
five
注:私はこの一見関連のある投稿を見つけましたが、ご覧のように少し混乱しています:
awk
を使用:
awk 's;/^three$/{s=1}' file
または
awk 's;$0=="three"{s=1}' file
s;
は、変数s
がtrueの場合に行を出力します。これは、パターン/ワードが見つかった後の最初のケースです.../^three$/{s=1}
は、パターン/ Wordが見つかった場合、変数s
をtrue(1)に設定します。GNU sed
:
sed 0,/three/d
Linuxはカーネルであり、ユーティリティはありません。 GNU sed
は、Debian GNU/LinuxのようなGNU/Linuxシステムで一般的に見られるsed
実装です。GNU sed
はLinuxよりも古く、ほとんどのUnixライクなシステムで動作するようにコンパイルされており、Linuxをカーネルとして実行しているほとんどのシステムで実行できます。それ自体がFree、Libre、およびOpenSourceの再実装です(そのような0
アドレス)70年代後半のUNIX sed
ユーティリティの。
POSIX sedを使用すると、次のように実行できます。
sed -ne '/three/!d;:a;n;p;ba' inp.file
Perlの使用:
Perl -lne 'print if 1 <(/three/...eof)' inp.file