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 å matche nøyaktig deiauk. Når jeg gjør dette:

grep "deiauk" file.txt 

får jeg dette resultatet:

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

men jeg trenger bare dette:

deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Jeg vet det «sa -w alternativet, men da må strengen min hele linje.

Kommentarer

  • Har du faktisk prøvd grep -w? (Det alternativet er akkurat for det formålet , og det fungerer for meg.) – Merk: alternativ -x samsvarer med hele linjen.
  • " Jeg vil matche nøyaktig deiauk / " Jeg trenger bare dette: deiauk 1611516 afsdf 765 " – hva trenger du?

Svar

Prøv en av:

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

Kommentarer

  • Hvis du har et bindestrek () på slutten av strengen dette skriptet vil gi det som et resultat, noe som ikke var forventet.
  • Riktig @Eve rt: Ord inkluderer bare alfabetegn, sifre og understreker, så hvis du har forkortelser eller andre bindestrek, fungerer dette ikke.
  • @Cyrus Jeg lærte den andre mens vi brukte vi / vim * kommando på ord.
  • Det fungerer ikke for noe spesialtegn det har for eksempel org.apache.avro avro betegnet med org.apache.avro avro+mapred (prøvd med *)
  • Bruk -wE for nøyaktig samsvar med flere ord (boolsk OR)

Svar

Prøv dette med GNU grep og merk ordgrenser med \b:

grep "\bdeiauk\b" file 

Utgang:

 deiauk 1611516 afsdf 765 

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

Kommentarer

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

Svar

Hvis din grep støtter -P (PCRE), du kan gjøre:

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

Kommentarer

  • Dette er det eneste svaret som fungerer med orddelte ord.
  • Hvorfor er \K ( PCRE reset av kampstart) nødvendig? Denne foreslåtte løsningen ser ut til å fungere fint uten den.

Svar

Avhengig av dine virkelige data, kan du se etter ordet etterfulgt av et mellomrom:

grep "deiauk " file.txt 

Hvis du vet at det må være i begynnelsen av linjen, sjekk etter det:

grep "^deiauk " file.txt 

Kommentarer

  • Dessverre er alle andre svar enn dette feil.
  • @Shatu Takk! Så la ' s se hvor lang tid det tar før det " boble opp til toppen " … Jeg ' er nysgjerrig fordi jeg liker å legge til svar på gamle spørsmål … Jeg tror det antas at det gjør det, men jeg tviler på det. Det ville være fint for meg, men faktisk nyttig for leserne. For å gjøre dette til et godt eksempel, kan jeg be deg om å skrive en kommentar som oppsummerer hva de andre svarene mangler?
  • (1) Gratulerer med å ha nådd 10 000 rep. Du har nå privilegiet å se at dette svaret ble gitt før, og ble slettet. (2) Det er alltid bedre å svare på spørsmålet så bredt som mulig, basert på det som blir sagt, og ikke gi et svar som fungerer bare for eksempeldataene. Fra eksempeldataene i spørsmålet ser det ut til at kolonnene er atskilt med mellomrom – men det er ikke spesifisert. Alle de andre svarene vil også fungere for tabulaseparerte kolonner. (3) Du unngikk den fatale feilen i tachomis (slettede) svar ved å legge til ^ – men alle de andre svarene fungerer … (Fortsatt)
  • ( Fortsatt) … hvis strengen vises i et annet felt enn det første. (4) Alle de andre svarene fungerer også hvis deiauk er det siste feltet (dvs. det er ingenting etter det).

Svar

Jeg fant -x fungerte for meg.

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 som samsvarer med hele linjen som inneholder bindestreker, -x det eneste alternativet. For eksempel grep -w "abc" <<<"abc-hac101-bb0" vil matche, men grep -x "abc" <<<"abc-hac101-bb0" vil ikke

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *