Szöveges fájlom van:

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 

és I pontosan meg akar egyezni deiauk. Amikor ezt csinálom:

grep "deiauk" file.txt 

Ezt az eredményt kapom:

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

de én csak erre van szükség:

deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Tudom, hogy van “sa -w opció, de akkor a karaktersorozatomnak egésznek kell lennie sor.

Megjegyzések

  • Kipróbálta már tényleg a grep -w programot? (Ez a lehetőség pontosan erre a célra szolgál , és ez nekem is működik.) – Megjegyzés: a -x opció megegyezik az egész sorral.
  • " Pontosan meg akarok egyezni deiauk / " Csak erre van szükségem: deiauk 1611516 afsdf 765 " – melyikre van szüksége?

Válasz

Próbálja ki az alábbiak egyikét:

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

Megjegyzések

  • Ha van kötőjel () a karakterlánc végén, ez a szkript ennek eredményeként hozza meg, ami nem várható. rt: A szavak csak alfa karaktereket, számokat és aláhúzásokat tartalmaznak, így ha rövidítéseket vagy más kötőjeleket tartalmaz, ez nem működik.
  • @Cyrus A másodikat a vi / vim * parancs szavakra.
  • Nem működik egyetlen speciális karakter esetében sem, például org.apache.avro avro a (a * -al próbálkozott)
  • A -wE használatához adja meg a pontos értéket Több szó egyezése (logikai VAGY)

Válasz

Próbálja ki ezt a GNU-val grep és jelölje meg a szóhatárokat \b:

grep "\bdeiauk\b" file 

Kimenet:

 deiauk 1611516 afsdf 765 

Lásd: http://www.regular-expressions.info/wordboundaries.html

Megjegyzések

  • Köszönöm, de miért nem működik ez nekem? echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
  • Próbálja ki a grep "\b${vard}\b" file.txt
  • még mindig nem működik ' t: /
  • Önnek ' szüksége lesz read: read -p "Enter login: " vard; grep "\b${vard}\b" file.txt

Válasz

Ha a grep támogatja a -P (PCRE) funkciókat, megteheti:

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

Megjegyzések

  • Ez az egyetlen válasz, amely elválasztott szavakkal működik.
  • Miért \K ( PCRE reset a meccs kezdete) szükséges? Úgy tűnik, hogy ez a javasolt megoldás jól működik anélkül.

Válasz

Valódi adataitól függően keresse meg a szót, amelyet szóköz követ:

grep "deiauk " file.txt 

Ha tudja, hogy a sor elején kell lennie, ellenőrizze:

grep "^deiauk " file.txt 

Megjegyzések

  • Sajnos az ezen kívüli összes válasz helytelen.
  • @Shatu köszi! Tehát hadd ' s lássa, mennyi időbe telik, amíg " buborékzik a felső " … Kíváncsi vagyok ', mert szeretek válaszokat adni a régi kérdésekre … Azt hiszem, feltételezzük, hogy igen, de kétlem. Csak jó lenne nekem, de valóban hasznos lenne az olvasók számára. Annak érdekében, hogy ez jó példa legyen, megkérhetném, hogy írjon egy megjegyzést, összefoglalva, hogy mi hiányzik a többi válaszból?
  • (1) Gratulálok a 10 000 rep eléréséhez. Most megvan a kiváltsága, hogy láthassa, hogy ezt a választ korábban megadták és törölték. (2) Mindig jobb, ha a kérdésre a lehető legszélesebb körben válaszolunk, az elmondottak alapján , és nem adunk olyan választ, amely csak a minta adataihoz használható. A kérdésben szereplő példaadatokból kitűnik, hogy az oszlopokat szóközök választják el – de ez nincs megadva. Az összes többi válasz a tabulátorral elválasztott oszlopoknál is működik. (3) A ^ hozzáadásával elkerülte a tachomi (törölt) válaszának végzetes hibáját – de az összes többi válasz működik… (folytatás)
  • ( Folytatás)… ha a karakterlánc nem az első mezőben jelenik meg. (4) Az összes többi válasz akkor is működik, ha a deiauk az utolsó mező (azaz nincs utána semmi).

Válasz

Úgy találtam, hogy a -x bevált.

Példa

$ grep -inx -d skip "favicon.ico" * test.txt:1:favicon.ico 

Grep kézikönyv

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

Megjegyzések

  • 1: 1 arányban a kötőjeleket tartalmazó egész sor -x az egyetlen lehetőség. Például a grep -w "abc" <<<"abc-hac101-bb0" egyezik, de a grep -x "abc" <<<"abc-hac101-bb0" nem

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük