単純な(?)Unix Grepコマンド


3

ある文字列を持ち、具体的には別の文字列を持たないファイルのリストを再帰的に表示する方法を教えてください。また、ファイル名ではなくファイルの内側を見るという意味です。

回答:


2

あなたは見つけることができます:

find . -type f -name "$fileglob" -exec grep -q $word1 {} \; -not -exec grep -q $word2 {} \; -print

0

正規表現ではなく文字列が本当に必要であると仮定すると、 fgrepそして:

fgrep -rl --null desired_string . | xargs -0 fgrep -lv undesired_string --

再帰的に -r )grep desired_string 現在のディレクトリの下に、ファイル名を表示します( -l )とそれからのファイル名を使用して、(それを呼び出すときにコマンドライン引数のためのスペースをいっぱいにしないように)fgrepを繰り返し呼び出します。 -v 一致の意味を逆にします。

これは --null 改行文字の代わりに各ファイル名の後にASCII NUL文字を使用して、スペースを含むファイル名を扱うことができるようにします。それは -0 xargsに与えられます。 Unixの変種(Linux、BSDなど)によっては、次のような短い選択肢があるかもしれません。 --nullしかし、それは移植性が劣ります。厳密に言えば、 --null 移植性はありませんが、最近のシステムの(f)grepはそれを持っているはずです。

-- 2番目の(f)grepの最後で、(f)grepが次のパラメータでオプションを探すのをやめます。 -それでもファイル名として処理されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.