文字列が見つかるまで、tailを使用してログファイルの出力を別のファイルに書き込む必要があります。
ログファイルには以下が含まれます。
I am Rahul.
I have 5 oranges.
The end.
Something something.
「ついに」までは、すべてを別のファイルに書きたいです。
tail -f var/log/output.log
| grep -m 1 "The end" | tee
Abc.txt
ただし、abc.txt ファイルには「End」のみが記録されます。
答え1
tail -f file | sed '/The end/q' | tee outfile
Sedは、「終了」が表示されるまですべての行を印刷し、その時点で終了します。
また、最近AskUbuntuで尋ねる。
答え2
grep
grep
ストリームまたはファイルから一部のパターンに一致する行を抽出するため、ここでは使用できません。止める特定の文字列が見つかると出力されます。デフォルトでは、その行より前のすべての行と一致し、その行の後の行と一致しないgrep
いくつかのパターンを指定する必要があります。The end.
sed '/The end\./q'
The end.
このコマンドは、文字列を含む行が表示されるまで標準入力ストリームの各行を出力します。このとき最後の行が出力され、スクリプト内の命令をsed
実行して命令が終了します。q
sed
パイプラインの一部として:
tail -f var/log/output.log |
sed '/The end\./q' |
tee Abc.txt
コマンドの実装に応じて、tail
パイプはラインに遭遇するとすぐに終了するか、存在しないプロセスに書き込もうとするとThe end.
すぐに終了します。つまり、ラインが見え、ラインが終了するとすぐに出力。tail -f
sed
The end.
sed
Something something.
tail -f
tail
OpenBSD(POSIXのようには動作しませんtail
)では、最後に説明された動作が提供されますが、GNUはtail
最初の動作(The end.
行に遭遇するとすぐに終了)を提供します。