web-dev-qa-db-ja.com

ファイル内のテキスト文字列を検索し、それに続くテキストの残りのみを出力しますか?

このフォーラムでは、テキストファイル内のさまざまな値を見つけ、それを囲むテキストを出力することに関連する多くの投稿を見つけています。ただし、「ストリーム指向」は見当たらないようです。

ファイル内の特定の文字列を検索し、ファイルの終わりに達するまで、それに続くテキストを出力onlyしたい。つまり、特定の文字列値に到達するまでファイル内のテキストを無視し、その時点からstdoutにテキストを出力するまで、フィルターのように動作するものが欲しいのです。ファイルの終わり。 stdoutを使用したいので、必要に応じて出力をファイルにパイプすることができます。

これを行うのに役立つLinuxテキストユーティリティはありますか?または、それを実行するためにbashシェルスクリプトを記述する必要がある場合、これを行うために使用する一般的な手順とコマンドラインユーティリティは何ですか?

たとえば、以下のサンプルファイルがあるとします。

one
two
three
four
five

「3」の後のすべてのテキストを出力したいので、結果は次のようになります。

four
five

注:私はこの一見関連のある投稿を見つけましたが、ご覧のように少し混乱しています:

テキストを検索して、後からテキストをコピーする方法

7
Robert Oschler

awkを使用:

awk 's;/^three$/{s=1}' file

または

awk 's;$0=="three"{s=1}' file
  • s;は、変数sがtrueの場合に行を出力します。これは、パターン/ワードが見つかった後の最初のケースです...
  • /^three$/{s=1}は、パターン/ Wordが見つかった場合、変数sをtrue(1)に設定します。
10
pLumo

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ユーティリティの。

9

POSIX sedを使用すると、次のように実行できます。

sed -ne '/three/!d;:a;n;p;ba' inp.file

Perlの使用:

Perl -lne 'print if 1 <(/three/...eof)' inp.file
1
Rakesh Sharma