grepによるネガティブマッチ(fooを含まない行をマッチさせる

私はこのコマンドの構文を理解しようとしてきました。

grep ! error_log | find /home/foo/public_html/ -mmin -60

または

grep '[^error_log]' | find /home/baumerf/public_html/ -mmin -60

error_log`という名前のファイルを除く、変更されたすべてのファイルを見る必要があります。

I've read it hereでは、1つの not-regex パターンしか見つかりませんでした。

ソリューション

grep -v`はあなたの友人です。

grep --help | grep invert  

-v, --invert-match マッチしない行を選択する

関連する-L-lの補語)もチェックしてください。

L, --files-without-matchは、マッチしないファイル名を表示します。

解説 (9)

また、より複雑なチェックを明確な方法で行うことができるので、これらの目的のために awk を使用することもできます。

'foo` を含まない行。

awk '!/foo/'

foobar` も含まない行。

awk '!/foo/ && !/bar/'

foobarのどちらも含まない行で、foo2またはbar2` を含むもの。

awk '!/foo/ && !/bar/ && (/foo2/ || /bar2/)'

といった具合になります。

解説 (1)

あなたの場合、おそらくgrepは使わず、代わりにfindコマンドに否定句を追加してください。

find /home/baumerf/public_html/ -mmin -60 -not -name error_log

名前の中にワイルドカードを入れたい場合は、例えば接尾辞が.logのファイルを除外するようにエスケープする必要があります。

find /home/baumerf/public_html/ -mmin -60 -not -name \*.log
解説 (0)