Jak używać dopasowania wykluczającego z grep w Linuksie (drukuj wiersze, które nie pasują)
grep
to narzędzie do wyszukiwania wiersza poleceń dla systemu Linux, które drukuje wiersze w plikach, które pasują do wzorca lub wyrażenia regularnego. Przydatne jest również odwracanie dopasowań, aby odfiltrować wszystkie wiersze w pliku, które zawierają dany ciąg.
Negatywne dopasowanie z grep
Aby użyć negatywnego dopasowania w grep
, musisz wydać polecenie z -v
flagami lub . --invert-match
Spowoduje to wydrukowanie tylko tych linii, które nie pasują do podanego wzorca.
grep -v "bar"file
Należy jednak pamiętać, że ponieważ grep
nic nie pasuje, nie ma możliwości użycia -o
flagi do wyświetlenia „tylko dopasowania”, ponieważ technicznie nic nie pasuje. grep
może dopasować wiele razy w ciągu, ale w tym przypadku nie ma znaczenia, czy istnieje wiele dopasowań. Każdy pojedynczy mecz spowoduje grep
pominięcie linii.
Działa to również z wyrażeniami regularnymi (regexes) i wyświetla dowolny ciąg pasujący do wyrażenia regularnego.
grep -v "foo ba[rz]"file
Chociaż możesz napisać wyrażenia regularne, które dopasowują się do wartości ujemnych, zazwyczaj łatwiej jest w ten sposób odwrócić dopasowanie.
Alternatywnie, jeśli wolisz używać awk
, możesz użyć modyfikatora wykrzyknika, aby odwrócić wyrażenie regularne.
awk '!/bar/' file
Negatywne pasujące nazwy plików
Flaga z małymi literami -l
spowoduje, że grep
nazwy plików zawierające dopasowania zostaną wydrukowane zamiast rzeczywistej dopasowanej treści. Może to być przydatne podczas skanowania listy plików, ale czasami warto ją odwrócić.
Reverse -l
to wariant pisany wielkimi literami -L
, który działa odwrotnie:
grep -L "bar". /*.txt
Upewnij się, że nie używasz -v
flagi c -L
do odwrócenia dopasowania przed wydrukowaniem plików bez dopasowania, w przeciwnym razie wpadniesz w sytuację „podwójnych przeciwieństw”, w której dopasowanie zostanie odwrócone dwa razy i nie przyniesie pożądanego efektu.
Dodaj komentarz