Am un fișier text:

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 

și eu doresc să se potrivească exact cu deiauk. Când fac acest lucru:

grep "deiauk" file.txt 

Obțin acest rezultat:

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

dar eu am nevoie doar de acest lucru:

deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Știu că există o opțiune „sa -w, dar șirul meu trebuie să fie întreg linie.

Comentarii

  • Ați încercat de fapt grep -w? (Această opțiune este exact în acest scop , și funcționează pentru mine.) – Notă: opțiunea -x se potrivește cu întreaga linie.
  • " Vreau să potrivesc exact deiauk / " Am nevoie doar de acest lucru: deiauk 1611516 afsdf 765 " – de ce aveți nevoie?

Răspundeți

Încercați una dintre:

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

Comentarii

  • Dacă aveți o liniuță () la sfârșitul șirului, acest script îl va aduce ca rezultat, ceea ce nu era de așteptat.
  • Corectați @Eve rt: Cuvintele includ doar litere alfa, cifre și caractere de subliniere, deci dacă aveți abrevieri sau alte elemente cratimate, acest lucru nu funcționează.
  • @Cyrus am învățat al doilea în timp ce foloseam vi / vim * pe cuvinte.
  • Nu funcționează pentru niciun caracter special pe care îl are de exemplu org.apache.avro avro greped cu org.apache.avro avro+mapred (încercat cu *)
  • Utilizați -wE pentru exact potrivire a mai multor cuvinte (OR boolean)

Răspuns

Încercați acest lucru cu GNU grep și marcați limitele cuvintelor cu \b:

grep "\bdeiauk\b" file 

ieșire:

 deiauk 1611516 afsdf 765 

Vedeți: http://www.regular-expressions.info/wordboundaries.html

Comentarii

  • Mulțumesc, dar de ce acest lucru nu funcționează pentru mine? echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
  • Încercați grep "\b${vard}\b" file.txt
  • încă nu funcționează ': /
  • ' veți avea nevoie de read: read -p "Enter login: " vard; grep "\b${vard}\b" file.txt

Răspuns

Dacă grep acceptă -P (PCRE), puteți face:

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

Comentarii

  • Acesta este singurul răspuns care funcționează cu cuvinte cratimate.
  • De ce este \K ( PCRE reset start start of match) este necesar? Această soluție propusă pare să funcționeze foarte bine fără ea.

Răspuns

În funcție de datele dvs. reale, ați putea căutați cuvântul urmat de un spațiu:

grep "deiauk " file.txt 

Dacă știți că trebuie să fie la începutul liniei, verificați-l:

grep "^deiauk " file.txt 

Comentarii

  • Din păcate, toate răspunsurile, altele decât acestea, sunt incorecte.
  • @Shatu Mulțumesc! Deci, să vedem ' s cât durează până la " balon până la partea de sus " … Sunt ' curios pentru că îmi place să adaug răspunsuri la întrebări vechi … Cred că se presupune că da, dar mă îndoiesc. Ar fi frumos pentru mine, dar de fapt util pentru cititori. Pentru ca acest exemplu să fie un exemplu bun, aș putea să vă rog să scrieți un comentariu care să rezume ce lipsesc celelalte răspunsuri?
  • (1) Felicitări pentru că ați atins 10.000 de rep. Acum aveți privilegiul să vedeți că acest răspuns a fost dat anterior și a fost șters. (2) Este întotdeauna mai bine să răspundeți la întrebare cât mai larg posibil, pe baza a ceea ce se spune, și să nu dați un răspuns care să funcționeze doar pentru datele eșantionului. Din datele de exemplu din întrebare, se pare că coloanele sunt separate prin spații – dar acest lucru nu este specificat. Toate celelalte răspunsuri vor funcționa și pentru coloanele separate prin tab. (3) Ați evitat defectul fatal în răspunsul lui Tachomi (șters) adăugând ^ – dar toate celelalte răspunsuri funcționează … (Continuare)
  • ( Continuat) … dacă șirul apare într-un alt câmp decât primul. (4) De asemenea, toate celelalte răspunsuri funcționează dacă „deiauk” este ultimul câmp (adică nu mai este nimic după el).

Răspuns

Am găsit că -x a funcționat pentru mine.

Exemplu

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

Comentarii

  • Pentru 1: 1 care corespunde întregului rând care conține cratime, -x singura opțiune. De exemplu, grep -w "abc" <<<"abc-hac101-bb0" se va potrivi, dar grep -x "abc" <<<"abc-hac101-bb0" nu

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *