Ik heb iets nodig als:
grep ^"unwanted_word"XXXXXXXX
Antwoord 1, autoriteit 100%
Je kunt het doen met -v
(voor --invert-match
) optie van grep als:
grep -v "unwanted_word" file | grep XXXXXXXX
grep -v "unwanted_word" file
filtert de regels met het unwanted_word
en grep XXXXXXXX
geeft alleen regels weer met het patroon XXXXXXXX
.
BEWERKEN:
Uit je opmerking lijkt het alsof je alle regels wilt weergeven zonder het unwanted_word
. In dat geval heb je alleen het volgende nodig:
grep -v 'unwanted_word' file
Antwoord 2, autoriteit 11%
Ik begreep de vraag als “Hoe kan ik een woord matchen maar een ander uitsluiten”, waarvoor één oplossing twee greps in serie is: eerste grep vindt het gewenste “woord1”, tweede grep sluit “woord2” uit:
grep "word1" | grep -v "word2"
In mijn geval: ik moet onderscheid maken tussen “plot” en “#plot”, wat de “woord”-optie van grep niet zal doen (“#” is geen alfanumeriek).
Hopelijk helpt dit.
Antwoord 3, autoriteit 4%
Als uw grep
de reguliere expressie van Perl met de optie -P
ondersteunt, kunt u dit doen (indien bash; indien tcsh moet u de !
):
grep -P '(?!.*unwanted_word)keyword' file
Demo:
$ cat file
foo1
foo2
foo3
foo4
bar
baz
Laten we nu alle foo
vermelden behalve foo3
$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$
Antwoord 4, autoriteit 4%
De juiste oplossing is om grep -v "word" file
te gebruiken, met zijn awk
equivalent:
awk '!/word/' file
Als u echter een complexere situatie heeft waarin u bijvoorbeeld XXX
wilt laten verschijnen en YYY
nietwilt verschijnen , dan is awk
handig in plaats van meerdere grep
s door te sturen:
awk '/XXX/ && !/YYY/' file
# ^^^^^ ^^^^^^
# I want it |
# I don't want it
Je kunt zelfs iets ingewikkelders zeggen. Bijvoorbeeld: ik wil die regels die ofwel XXX
of YYY
bevatten, maar niet ZZZ
:
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
enz.
Antwoord 5
Overeenkomst omkeren met grep -v:
grep -v "unwanted word" file pattern
Antwoord 6
grep biedt de optie ‘-v’ of ‘–invert-match’ om niet-overeenkomende regels te selecteren.
bijv.
grep -v 'unwanted_pattern' file_name
Hiermee worden alle regels van het bestand bestandsnaam uitgevoerd, dat geen ‘ongewenst patroon’ heeft.
Als u het patroon zoekt in meerdere bestanden in een map, kunt u de recursieve zoekoptie als volgt gebruiken
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
Hier probeert GreP alle voorvallen van ‘Whange_pattern’ in alle bestanden vanuit de momenteel map in te stellen en door te geven aan tweede grep om de ‘ongewenste_pattern’ uit te filteren.
‘|’ – Pijp vertelt Shell om de standaarduitvoer van het linkerprogramma (GreP -R ‘Wanted_Pattern’ *) aan te sluiten op standaardinvoer van het juiste programma (GreP-V ‘ongewenste_pattern’).
Antwoord 7
De optie -v
toont u alle regels die niet overeenkomen met het patroon.
grep -v ^unwanted_word
Antwoord 8
Ik heb het root (“/”) Mount Point uitgesloten met behulp van grep -vw "^/"
.
# cat /tmp/topfsfind.txt| head -4 |awk '{print $NF}'
/
/root/.m2
/root
/var
# cat /tmp/topfsfind.txt| head -4 |awk '{print $NF}' | grep -vw "^/"
/root/.m2
/root
/var
Antwoord 9
Ik heb een map met een stel bestanden. Ik wil alle bestanden vinden die niet de string “Speedup” bevatten, dus ik heb de volgende opdracht met succes gebruikt:
grep -iL speedup *