grep kullanarak negatif eşleştirme (foo içermeyen satırlarla eşleştirme)

Bu komutun sözdizimini çözmeye çalışıyordum:

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

veya

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

error_log` adlı dosyalar dışında değiştirilen tüm dosyaları görmem gerekiyor.

Burada okudum, ancak yalnızca bir not-regex kalıbı buldum.

Çözüm

"grep -v" sizin arkadaşınızdır:

grep --help | grep invert  

-v, --invert-match eşleşmeyen satırları seç

Ayrıca ilgili -L (-lnin tümleyeni) seçeneğine de göz atın.

-L, --files-without-match yalnızca eşleşme içermeyen DOSYA adlarını yazdırır

Yorumlar (9)

Bu amaçlar için awk da kullanabilirsiniz, çünkü daha karmaşık kontrolleri daha net bir şekilde yapmanızı sağlar:

İçinde foo bulunmayan satırlar:

awk '!/foo/'

Ne foo ne de bar içeren satırlar:

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

Ne foo ne de bar içeren ve foo2 ya da bar2 içeren satırlar:

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

Ve böyle devam eder.

Yorumlar (1)

Sizin durumunuzda, muhtemelen grep kullanmak istemezsiniz, bunun yerine find komutuna olumsuz bir cümle ekleyin, örn.

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

Joker karakterleri ada dahil etmek istiyorsanız, örneğin .log son ekine sahip dosyaları hariç tutmak için bunlardan kaçmanız gerekir:

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