1

主に、コマンドが失敗する原因となるファイル名のスペースを処理するために、bash コマンドでバッククォート内の文字をエスケープしようとしています。

私がこれまで持っているコマンドは次のとおりです。

grep -Li badword `grep -lr goodword *`

このコマンドは、単語「badword」を含まないが「goodword」を含むファイルのリストを生成する必要があります。

4

2 に答える 2

3

エスケープを正しく行ったとしても、 によって出力されるファイルの数がgoodword grepコマンド ラインの長さの制限に達すると、問題が発生します。このように、最初の出力をgrep2 番目の出力にパイプすることをお勧めします。grep

grep -lr -- goodword * | xargs grep -Li -- badword

これはスペースを含むファイルを正しく処理しますが、ファイル名に改行が含まれていると失敗します。少なくとも GNUgrepxargs、このようにファイル名を NUL バイトで区切るサポート

grep -lrZ -- goodword * | xargs -0 grep -Li -- badword

編集: 一部のファイル名が で始まり、追加のオプションとして解釈される場合を回避するために、呼び出しに二重ダッシュ--を追加しました。grep-grep

于 2010-08-13T17:21:17.697 に答える
1

次のように書き直してはどうでしょうか。

grep -lr goodword * | grep -Li badword
于 2010-08-13T17:08:00.397 に答える