アプリケーションからの出力を grep し、画面に表示してファイルに書き込みますか?

アプリケーションからの出力を grep し、画面に表示してファイルに書き込みますか?

アプリケーションを実行し、出力を にパイプしますgrep。これは機能します。ただし、出力を画面に表示し、ファイルに書き込みたいと考えています。

grepそこで、結果を次のようにパイプしますtee

./app | grep something | tee file.txt

ただし、100% の結果があっても、結果は表示 (または書き込み) されません (2 つの実行中のインスタンスでこれを確認しました)。

アプリの出力を grep し、ファイルに書き込んで画面に表示するにはどうすればよいですか?

答え1

記述したとおりにコマンドは動作するはずです。コマンドが正しく機能しない理由はいくつか考えられます。

  1. アプリは出力テキストを標準以外の出力に送信します。
  2. grep コマンドで検索する文字チェーンが正しく入力されていません。

ケース1の解決

  1. アプリが検索対象の出力に必要なテキストを送信していることを手動で確認します。./app
  2. 出力テキストをファイルにリダイレクトし./app > file.txt、ファイルの内容を確認します。cat file.txt
  3. ファイルに目的のテキストが含まれていない場合、アプリケーションが出力を標準出力ではなくエラー出力に送信している可能性があります。そのため、別の方法でファイルにリダイレクトして
    ./app 2 > file.txt、ファイルの内容を再度確認してください。cat file.txt
  4. 今回、ファイルの内容が正しければ、解決は簡単です。エラー出力を標準出力にリダイレクトするだけです。
./app 2>&1 | grep "something" | tee file.txt

ケース2の解決

  1. 検索パターンとして使用している文字列を慎重に確認してください。ワイルドカード文字、$variablename 変数、正規表現などのランダムな誤解釈を排除するために、文字列を引用符またはアポストロフィで囲みます。
  2. まず、誤解されることのない文字や数字のみで構成された非常に単純な文字列に対して grep を使用して検索をテストします。

関連情報