STDOUTで多くの出力を生成するコマンドがあり、次のようにそれをファイルにリダイレクトできることがわかります。
./myCMD 1>tmp
出力をファイルにリダイレクトする前にフィルタリングする方法たとえば、特定のキーワードを含む出力行のみをリダイレクトしたいとします。
答え1
tmp
特定の行だけをファイルに入れ、残りを変更したくない場合:
cmd | awk '/pattern/ {print > "tmp"; next}
{print}'
または:
cmd | sed '/pattern/!b
w tmp
d'
(一行cmd | sed -e '/pattern/!b' -e 'w tmp' -e d
:)
または:
cmd | sed '/pattern/ {
w tmp
d
}'
(一行cmd | sed -e '/pattern/{w tmp' -e 'd;}'
:)
sed
についてpattern
基本的な正規表現であるのに対し、についてはawk
次のとおりです。拡大する正規表現。
答え2
パイプを使用してこれを行うことができます。
./myCMD | grep keyword > tmp
これにより、「キーワード」を含む行だけがファイルに書き込まれますtmp
。
出力全体を表示したいが、それらの一部だけをファイルに書き込むには、次のように追加しますtee
(シェルがプロセス置換をサポートしていると仮定)。
./myCMD | tee >(grep keyword > tmp)