grep コマンドを調整して「余分な」行を回避する

grep コマンドを調整して「余分な」行を回避する

圧縮ファイル内のテキストを見つけなければなりません。Cygwin を使用しています。一部の圧縮ファイルは空です。当然、それらの「空の zip ファイル」に関する「ノイズ」情報は一切欲しくありません。例:

find . -iname '*.zip' -print -exec unzip -l {} \; |grep -i vbs

vbs探している文字列はどこにありますか。

問題は、探しているものが返される一方で、次のような行を含む多くのノイズも返されることです。

C\ProgramData\ABC\DEF\VBScripts\OutputArchiveFiles.vbs
warning [/z/XYZ/Backup/123/456/Backup Set 1/Backup Files 1/Backup files 2.zip]:  zipfile is empty

「zipファイルが空です」という行は見たくない

パイプで接続しようとしました|grep -v 'zipfile is empty'が、それでもそれらの行が出力されます。

質問: どうすれば、これらの「空の」行を印刷せずに、探している行 (つまり、vbs) だけを表示できるでしょうか?

答え1

これらの追加行はstderrストリーム内にある可能性があります。別のファイルにリダイレクトする(例command 2> error.txt

基本的には、次を実行します:

find . -iname '*.zip' -print -exec unzip -l {} \; 2> error.txt |grep -i vbs 

これで問題が解決した場合は、次error.txtのコードに置き換えることができます/dev/null(cygwinのすべてのバージョンで機能するとは限りません)。

関連情報