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

  • Heb je 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.
  • " Ik wil exact overeenkomen met deiauk / " Ik heb alleen dit nodig: deiauk 1611516 afsdf 765 " – welke heb je nodig?

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 met org.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, maar grep -x "abc" <<<"abc-hac101-bb0" niet

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *