Am nevoie de ceva de genul:
grep ^"unwanted_word"XXXXXXXX
Puteți face, de asemenea, folosind -v
(pentru --invertit-meci
) opțiunea de grep ca:
grep -v "unwanted_word" file | grep XXXXXXXX
grep -v "unwanted_word" fișier
va filtra liniile care au unwanted_word " și " grep XXXXXXXX
va lista doar linii cu model XXXXXXXX
.
EDIT:
Din comentariul tau se pare ca vrei pentru a lista toate liniile, fără unwanted_word`. În acest caz, tot ce ai nevoie este:
grep -v 'unwanted_word' file
Am înțeles întrebarea "Cum am potrivi un cuvânt, dar exclude un alt", pentru care o soluție este de două greps în serie: Prima grep găsirea vrut "word1", al doilea grep exclusiv "word2":
grep "word1" | grep -v "word2"
În cazul meu: am nevoie pentru a diferenția între "teren" și "#complot" care grep's "cuvantul" opțiune câștigat't do ("#" nu este un alfanumerice).
Sper că acest lucru vă ajută.
Dacă grep
sprijină expresie regulată Perl cu -P
opțiune, puteți face (dacă bash; dacă tcsh te'll nevoie pentru a scăpa de !
):
grep -P '(?!.*unwanted_word)keyword' file
Demo:
$ cat file
foo1
foo2
foo3
foo4
bar
baz
Să ne acum lista toate "foo", cu excepția foo3`
$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$
Soluția corectă este de a utiliza grep -v "cuvantul" fișier
, cu awk
echivalent:
awk '!/word/' file
Cu toate acestea, dacă se întâmplă să aibă o situație mai complexă în care doriți, să zicem, XXX
să apară și YYY
nu să apară, apoi awk
vine la îndemână în loc de conducte mai multe `grep este:
awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
Se poate spune chiar ceva mai complex. De exemplu: vreau acele linii care conțin fie XXX
sau YYY
, dar nu "ZZZ":
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
etc.
grep oferă '-v' sau '--invertit-match' opțiunea de a selecta non-potrivire linii.
de exemplu
grep -v 'unwanted_pattern' file_name
Aceasta va afișa toate liniile din fișierul nume_fișier, care nu au 'unwanted_pattern'.
Dacă sunteți în căutarea modelului din mai multe fisiere intr-un folder, puteți utiliza căutare recursivă opțiune, după cum urmează
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
Aici grep va încerca să lista toate aparițiile 'wanted_pattern' in toate fișierele din cadrul în prezent director și trece la a doua grep pentru a filtra 'unwanted_pattern'. '|' - conducta va spune shell pentru a conecta ieșirea standard a lăsat program (grep -r 'wanted_pattern' *) la intrarea standard a dreptul program (grep -v 'unwanted_pattern').