最近sed
を使い始めました。私がそれを使用する1つの便利な方法は、ログファイルの重要でない行を無視することです。
tail -f example.com-access.log | sed '/127.0.0.1/d;/ELB-/d;/408 0 "-" "-"/d;'
しかし、find
で同様に使用しようとすると、期待した結果が得られません。次のように "Permission denied"を含む行を無視しようとしています:
find . -name "openssl" | sed '/Permission denied/d;'
ただし、stdout
にはまだ「Permission denied」メッセージがたくさん表示されます。
[〜#〜]編集[〜#〜]
以下の正解で述べたように、「Permission denied」メッセージはstderr
ではなくstdout
に表示されます。
問題はstderrに出力されるエラー出力であるため、sed
コマンドは入力をキャッチできません。単純な解決策は、stderrをstdoutにリダイレクトすることです。
find . -name "openssl" 2>&1 | sed '/Permission denied/d;'
sed
を使用してfind
の出力からpermission deniedメッセージを削除しようとしている理由がわかりません- sed
の使い方を学ぼうとしているのでない限り。
代わりにこれを実行します:
見つける。 -name "openssl" 2>/dev/null
ここでは、stderr(ファイル記述子2)を/dev/null
にリダイレクトしています(man null
を参照)。言い換えると、2>/dev/null
はstderrに書き込まれたすべてを単に破棄します。