Yanıtlar:
Bunu grep -v(for --invert-match) seçeneğini kullanarak şu şekilde yapabilirsiniz :
grep -v "unwanted_word" file | grep XXXXXXXX
grep -v "unwanted_word" fileolan satırlara filtre uygular unwanted_wordve grep XXXXXXXXyalnızca desenli satırları listeler XXXXXXXX.
DÜZENLE:
Yorumunuzdan, tüm satırları unwanted_word. Bu durumda ihtiyacınız olan tek şey:
grep -v 'unwanted_word' file
-v 'unwanted_word' --after Nyardımcı olmaz çünkü satır ve N satırları DAHİLDİR.
-vveya --invert-matcheşleşmeyen satırları seçin. Sizin durumunuzda grep -v 'unwanted_word' fileveya grep --invert-match 'unwanted_word' file.
git status -s |grep -v "folder_I_dont_care"
sunöyle durumlar hariç, sunrise, grep sun|grep -v sunriseher ikisini de içerir çizgi atlar sunve sunriseben istemiyorum ne olduğunu, bir kerede. grep -P 'sun(?!rise)'daha iyi.
Soruyu "Bir kelimeyi nasıl eşleştirebilirim ama başka bir kelimeyi hariç tutabilirim" şeklinde anladım, bunun için bir çözüm seri iki grepstir: İlk grep aranan "word1", ikinci grep "word2" hariç:
grep "word1" | grep -v "word2"
Benim durumumda: "plot" ile "#plot" arasında ayrım yapmam gerekiyor ki bu grep'in "word" seçeneği işe yaramayacak ("#" alfasayısal değil).
Bu yardımcı olur umarım.
word1.
Senin Eğer grepdestekleri ile normal ifadeyi Perl -Pseçenek size (eğer bash; kaçmak gerekir tcsh eğer yapabilirsiniz !):
grep -P '(?!.*unwanted_word)keyword' file
Demo:
$ cat file
foo1
foo2
foo3
foo4
bar
baz
Şimdi foohariç her şeyi listeleyelimfoo3
$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$
grep -v -Pnormal ifadede olumsuzlama olmadan da çalıştığını unutmayın .
!" . Teşekkürler teşekkürler teşekkürler! İstediğim bu!
Doğru çözüm kullanımına olan grep -v "word" fileonun ile awkeşdeğer:
awk '!/word/' file
Sen, sen diyelim ki, istediğiniz daha karmaşık bir durum var için olur, ancak, XXXgörünmesini ve YYY değil görünmesini, daha sonra awkyerine birkaç borulama kullanışlı geliyor greps:
awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
Hatta daha karmaşık bir şey bile söyleyebilirsiniz. Örneğin: Ben bu satırları ya içeren istiyorum XXXya YYYama ZZZ:
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
vb.
grep -PBüyük dosyalardaki çözümden çok daha hızlı görünüyor .
grep -PPerl regexp kullanmak anlamına gelir, bu yüzden bu paketi yüklemek normalden çok daha pahalı olacaktır grep.
grep, eşleşmeyen satırları seçmek için '-v' veya '--invert-match' seçeneği sunar.
Örneğin
grep -v 'unwanted_pattern' file_name
Bu, dosya_adı dosyasındaki 'istenmeyen_ desen' içermeyen tüm satırları çıktılar.
Deseni bir klasör içindeki birden fazla dosyada arıyorsanız, özyinelemeli arama seçeneğini aşağıdaki gibi kullanabilirsiniz
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
Burada grep, şu anki dizindeki tüm dosyalarda 'wanted_pattern' in tüm örneklerini listelemeye ve 'istenmeyen_pattern'i' filtrelemek için ikinci grep'e aktarmaya çalışacaktır. '|' - boru kabuğa sol programın standart çıktısını (grep -r 'wanted_pattern' *) sağ programın standart girdisine (grep -v 'istenmeyen_pattern') bağlamasını söyler.
Bir sürü dosya içeren bir dizinim var. Ben aşağıdaki komutu başarıyla kullandım "speedup" dizesini içermiyor tüm dosyaları bulmak istiyorum:
grep -iL speedup *
grep -Rv "word_to_be_ignored" . | grep "word_to_be_searched"