このフォーラムでは、テキストファイルでさまざまな値を検索し、その周辺のテキストを出力することに関する記事をたくさん見つけました。しかし、私は「ストリーム志向」を見つけることができないようです。
ファイル内の特定の文字列を見つけて出力したいです。ただファイルの終わりに達するまで続くテキスト。つまり、特定の文字列値に達するまでファイル内のテキストを無視し、その時点でテキストを出力するフィルタなどが必要です。標準出力ファイルの最後まで。使いたい標準出力したがって、必要に応じて出力をファイルにパイプできます。
これを行うのに役立つLinuxテキストユーティリティはありますか?では、どうすればよいですか?または、これを行うためにbashシェルスクリプトを作成する必要がある場合は、これを実行するために使用する一般的な手順とコマンドラインユーティリティは何ですか?
たとえば、次のサンプルファイルが提供されます。
one
two
three
four
five
「3」以降のすべてのテキストを出力すると仮定すると、結果は次のようになります。
four
five
注:関連性があるように見えるこの記事を見つけましたが、ご覧のように少し混乱しています。
答え1
使用awk
:
awk 's;/^three$/{s=1}' file
または
awk 's;$0=="three"{s=1}' file
s;
変数がtrueの場合、行は印刷されますs
。パターン/単語が見つかった後、初めてこれが発生します。/^three$/{s=1}
s
パターン/単語が見つかると、変数はtrue(1)に設定されます。
答え2
GNUの使用sed
:
sed 0,/three/d
Linuxはカーネルなのでユーティリティはありません。 GNUは、Debian GNU / LinuxなどのGNU / Linuxシステムの一般的な実装sed
です。sed
GNU はsed
Linux より先にあり、Linux をカーネルとして実行するほとんどのシステムを含む、ほとんどの Unix 系で実行するようにコンパイルされています。それ自体は、1970年代後半0
のUNIXユーティリティ(このアドレスを含む一部の拡張を含む)を無料でオープンソースで再実装したものです。sed
答え3
POSIX sedを使用すると、次のことができます。
sed -ne '/three/!d;:a;n;p;ba' inp.file
パールの使用:
perl -lne 'print if 1 <(/three/...eof)' inp.file