Ik heb een tekstbestand:
deiauk 1611516 afsdf 765 minkra 18415151 asdsf 4152 linkra sfsfdsfs sdfss 4555 deiauk1 sdfsfdsfs 1561 51 deiauk2 115151 5454 4 deiauk 1611516 afsdf ddfgfgd luktol1 4545 4 9 luktol 1
en ik willen exact overeenkomen met deiauk
. Als ik dit doe:
grep "deiauk" file.txt
krijg ik dit resultaat:
deiauk 1611516 afsdf 765 deiauk1 sdfsfdsfs 1561 51 deiauk2 115151 5454 4
maar ik heb dit alleen nodig:
deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd
Ik weet dat er een “sa -w
optie is, maar dan moet mijn string heel regel.
Reacties
Antwoord
Probeer een van de volgende:
grep -w "deiauk" textfile grep "\<deiauk\>" textfile
Reacties
- Als je een streepje ( – ) aan het einde van de string, dit script zal het als resultaat brengen, wat niet verwacht werd.
- Corrigeer @Eve rt: woorden bevatten alleen alfatekens, cijfers en onderstrepingstekens, dus als je afkortingen of andere items hebt afgebroken, werkt dit niet.
- @Cyrus Ik heb de tweede geleerd tijdens het gebruik van vi / vim
*
commando voor woorden. - Het werkt niet voor een speciaal teken dat het heeft, bijvoorbeeld
org.apache.avro avro
gegraveerd metorg.apache.avro avro+mapred
(geprobeerd met *) - Gebruik
-wE
voor exacte match van meerdere woorden (boolean OR)
Answer
Probeer dit met GNU grep
en markeer woordgrenzen met \b
:
grep "\bdeiauk\b" file
Uitvoer:
deiauk 1611516 afsdf 765
Zie: http://www.regular-expressions.info/wordboundaries.html
Opmerkingen
- Bedankt, maar waarom werkt dit niet voor mij?
echo "Enter login: " $vard
grep -E "$\bvard\b" file.txt
- Probeer
grep "\b${vard}\b" file.txt
- werkt nog steeds niet ' t werk: /
- U ' zult
read
:read -p "Enter login: " vard; grep "\b${vard}\b" file.txt
Antwoord
Als uw grep
ondersteunt -P
(PCRE), u kunt het volgende doen:
$ grep -P "(^|\s)\Kdeiauk(?=\s|$)" file.txt deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd
Opmerkingen
- Dit is het enige antwoord dat werkt met afgebroken woorden.
- Waarom is
\K
( PCRE reset start van wedstrijd) nodig? Deze voorgestelde oplossing lijkt prima te werken zonder.
Antwoord
Afhankelijk van uw echte gegevens, zou u zoek naar het woord gevolgd door een spatie:
grep "deiauk " file.txt
Als je weet dat het aan het begin van de regel moet staan, controleer het dan:
grep "^deiauk " file.txt
Reacties
- Helaas zijn alle andere antwoorden onjuist.
- @Shatu Bedankt! Dus laat ' kijken hoelang het duurt voordat " naar de top borrelt " … Ik ' ben nieuwsgierig omdat ik graag antwoorden op oude vragen toevoeg … Ik denk dat het aangenomen wordt, maar ik betwijfel het. Het zou gewoon leuk zijn voor mij, maar eigenlijk nuttig voor de lezers. Kan ik je, om dit een goed voorbeeld te maken, vragen om een opmerking te schrijven waarin je samenvat wat de andere antwoorden missen?
- (1) Gefeliciteerd met het bereiken van 10K rep. U heeft nu het voorrecht om te zien dat dit antwoord eerder is gegeven en is verwijderd. (2) Het is altijd beter om de vraag zo breed mogelijk te beantwoorden, gebaseerd op wat er wordt gezegd, en niet een antwoord te geven dat alleen werkt voor de voorbeeldgegevens. Uit de voorbeeldgegevens in de vraag blijkt dat de kolommen worden gescheiden door spaties, maar dat is niet gespecificeerd. Alle andere antwoorden werken ook voor door tabs gescheiden kolommen. (3) Je hebt de fatale fout in het (verwijderde) antwoord van tachomi vermeden door de
^
toe te voegen – maar alle andere antwoorden werken … (vervolg) - ( Vervolg) … als de tekenreeks in een ander veld dan het eerste voorkomt. (4) Alle andere antwoorden werken ook als deiauk het laatste veld is (dwz er staat niets achter).
Answer
Ik vond dat -x
voor mij werkte.
Voorbeeld
$ grep -inx -d skip "favicon.ico" * test.txt:1:favicon.ico
Grep Manual
-x, --line-regexp Select only those matches that exactly match the whole line. For a regular expression pattern, this is like parenthesizing the pattern and then surrounding it with ^ and $.
Reacties
- Voor 1: 1 die overeenkomt met de hele regel die koppeltekens bevat,
-x
de enige optie.grep -w "abc" <<<"abc-hac101-bb0"
komt bijvoorbeeld overeen, maargrep -x "abc" <<<"abc-hac101-bb0"
niet
grep -w
echt geprobeerd? (Die optie is precies voor dat doel , en het werkt voor mij.) – Opmerking: optie-x
komt overeen met de hele regel.deiauk
/ " Ik heb alleen dit nodig:deiauk 1611516 afsdf 765
" – welke heb je nodig?