Jeg har en tekstfil:

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 

og I ønsker at matche nøjagtigt deiauk. Når jeg gør dette:

grep "deiauk" file.txt 

får jeg dette resultat:

deiauk 1611516 afsdf 765 deiauk1 sdfsfdsfs 1561 51 deiauk2 115151 5454 4 

men jeg behøver kun dette:

deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Jeg ved der “sa -w mulighed, men så skal min streng bearbejde hele linje.

Kommentarer

  • Har du faktisk prøvet grep -w? (Denne mulighed er nøjagtigt til det formål , og det virker for mig.) – Bemærk: indstilling -x matcher hele linjen.
  • " Jeg vil matche nøjagtigt deiauk / " Jeg har kun brug for dette: deiauk 1611516 afsdf 765 " – hvad har du brug for?

Svar

Prøv en af:

grep -w "deiauk" textfile grep "\<deiauk\>" textfile 

Kommentarer

  • Hvis du har et bindestreg () i slutningen af strengen, dette script vil bringe det som et resultat, hvilket ikke var forventet.
  • Korrekt @Eve rt: Ord indeholder kun alfabetegn, cifre og understregninger, så hvis du har forkortelser eller andre bindestreg, fungerer dette ikke.
  • @Cyrus Jeg lærte den anden, mens jeg brugte vi / vim * kommando på ord.
  • Det fungerer ikke for noget specielt tegn, det har for eksempel org.apache.avro avro betegnet med org.apache.avro avro+mapred (prøvet med *)
  • Brug -wE for nøjagtig match af flere ord (boolsk ELLER)

Svar

Prøv dette med GNU grep og marker ordgrænser med \b:

grep "\bdeiauk\b" file 

Output:

 deiauk 1611516 afsdf 765 

Se: http://www.regular-expressions.info/wordboundaries.html

Kommentarer

  • Tak, men hvorfor fungerer dette ikke for mig? echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
  • Prøv grep "\b${vard}\b" file.txt
  • fungerer stadig ikke ' t: /
  • Du ' skal bruge read: read -p "Enter login: " vard; grep "\b${vard}\b" file.txt

Svar

Hvis din grep understøtter -P (PCRE), du kan gøre:

$ grep -P "(^|\s)\Kdeiauk(?=\s|$)" file.txt deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Kommentarer

  • Dette er det eneste svar, der fungerer med orddelte ord.
  • Hvorfor er \K ( PCRE nulstillet start af kamp) nødvendigt? Denne foreslåede løsning ser ud til at fungere fint uden den.

Svar

Afhængigt af dine reelle data kan du kig efter ordet efterfulgt af et mellemrum:

grep "deiauk " file.txt 

Hvis du ved, at det skal være i starten af linjen, skal du kontrollere det:

grep "^deiauk " file.txt 

Kommentarer

  • Desværre er alle svarene bortset fra dette ikke korrekte.
  • @Shatu Tak! Så lad ' s se, hvor lang tid det tager, før det " bobler op til toppen " … Jeg ' er nysgerrig, fordi jeg kan lide at tilføje svar på gamle spørgsmål … Jeg tror, det antages, at det gør det, men jeg tvivler på det. Det ville bare være rart for mig, men faktisk nyttigt for læserne. For at gøre dette til et godt eksempel, kan jeg bede dig om at skrive en kommentar, der opsummerer, hvad de andre svar mangler?
  • (1) Tillykke med, at du når 10K rep. Du har nu privilegiet at se, at dette svar blev givet før og blev slettet. (2) Det er altid bedre at besvare spørgsmålet så bredt som muligt, baseret på hvad der er sagt, og ikke give et svar, der fungerer kun til eksempeldataene. Af eksemplets data i spørgsmålet ser det ud til, at kolonnerne er adskilt af mellemrum – men det er ikke specificeret. Alle de andre svar fungerer også for faneadskilte kolonner. (3) Du undgik den fatale fejl i tachomis (slettede) svar ved at tilføje ^ – men alle de andre svar fungerer … (Fortsat)
  • ( Fortsættes) … hvis strengen vises i et andet felt end det første. (4) Alle de andre svar fungerer også, hvis deiauk er det sidste felt (dvs. der er intet efter det).

Svar

Jeg fandt -x fungerede for mig.

Eksempel

$ 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 $. 

Kommentarer

  • For 1: 1, der matcher hele linjen, der indeholder bindestreger, -x den eneste mulighed. For eksempel grep -w "abc" <<<"abc-hac101-bb0" matcher, men grep -x "abc" <<<"abc-hac101-bb0" vil ikke

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *