1

プロセスの stderr の新しい各行を一連のテキスト ファイルにリダイレクトしたいと考えています。bashでそれを行うにはどうすればよいですか?

私が試してみました:

myProcess 2>&1 >/dev/null | grep 'Parsed' > parsed.txt | tail -f parsed.txt > line.`date +%s`.txt 
4

5 に答える 5

1

出力の各行を読み取り、明示的に新しいファイルにリダイレクトする必要があります。

myProcess 2>&1 >/dev/null | grep 'Parsed' | tee parsed.txt | while IFS= read -r line; do
    echo "$line" >> line.$(date +%s).txt
done

から各行をファイルteeに書き込むための使用と、各行を毎秒ファイルにリダイレクトするループの使用にも注意してください。grepparsed.txtwhile

于 2013-07-02T21:56:35.607 に答える
0
#!/bin/bash

function splitter {
   grep 'Parsed' |
   while read L; do
      echo "$L" >> `date +%s`
   done
}

myProcess 2> >( splitter ) > /dev/null

2 つのコメント:

  • 2>&1 >/dev/null を使用したトリックも機能します。これは別の方法です。
  • スプリッターでは、「>」だけでなく「>>」を使用する必要があります。同じ秒に 2 行が出力される可能性があるためです。そのような場合、ファイルの最後の行だけが表示されます。
于 2013-07-02T22:01:00.887 に答える
0
... | grep 'Parsed' > parsed.txt

grepすべての出力をにリダイレクトするparsed.txtため、次のパイプに入力するものは何もありません。また、tail同時に両方ではなく、パイプラインまたはファイルのいずれかから読み取ります。

同じ出力を複数のファイルに送信する場合は、次のものが必要ですtee

myProcess 2>&1 >/dev/null | grep 'Parsed' | tee f1.txt | tee f2.txt > f3.txt
于 2013-07-02T22:01:13.280 に答える
0

別のバリアント:

myprocess 2> >(sed 's/.*/echo "&">>$(date +%s)/e;d')

gnu sed と bash がプロセスのリダイレクトをサポートする必要があります。

于 2013-07-03T06:44:51.410 に答える