Minulla on tekstitiedosto:

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 

ja I haluat täsmätä deiauk. Kun teen tämän:

grep "deiauk" file.txt 

Saan tämän tuloksen:

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

mutta minä tarvitsee vain tämä:

deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Tiedän vaihtoehdon ”sa -w, mutta sitten merkkijononi täytyy tehdä koko rivi.

Kommentit

  • Oletko todella kokeillut grep -w? (Tämä vaihtoehto on juuri tätä tarkoitusta varten ja se toimii minulle.) – Huomaa: vaihtoehto -x vastaa koko riviä.
  • " Haluan täsmätä tarkalleen deiauk / " Tarvitsen vain tämän: deiauk 1611516 afsdf 765 " – mitä tarvitset?

Vastaa

Kokeile jotakin seuraavista:

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

Kommentit

  • Jos sinulla on viiva () merkkijonon lopussa tämä komentosarja tuo sen seurauksena, mitä ei odotettu.
  • Oikea @Eve rt: Sanat sisältävät vain aakkoset, numerot ja alaviivat, joten jos sinulla on lyhenteitä tai muita tavutettuja tavuja, tämä ei toimi.
  • @Cyrus opin toisen käytettäessä vi / vim * -komento sanoille.
  • Se ei toimi millekään erikoismerkille, jonka se on esimerkiksi org.apache.avro avro greped org.apache.avro avro+mapred (yritetty *: lla)
  • Käytä tarkkaa -wE useiden sanojen vastaavuus (looginen OR)

Vastaa

Kokeile tätä GNU: lla grep ja merkitse sanarajat \b:

grep "\bdeiauk\b" file 

Tulos:

 deiauk 1611516 afsdf 765 

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

Kommentit

  • Kiitos, mutta miksi tämä ei toimi minulle? echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
  • Kokeile grep "\b${vard}\b" file.txt
  • ei vieläkään toimi ': /
  • Tarvitset ' tarvitset read: read -p "Enter login: " vard; grep "\b${vard}\b" file.txt

Vastaa

Jos grep tukee -P (PCRE), voit tehdä seuraavaa:

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

Kommentit

  • Tämä on ainoa vastaus, joka toimii tavutettujen sanojen kanssa.
  • Miksi \K ( Tarvitaanko PCRE-palautus ottelun alku)? Tämä ehdotettu ratkaisu näyttää toimivan hienosti ilman sitä.

Vastaa

Todellisista tiedoistasi riippuen voit etsi sanaa, jota seuraa välilyönti:

grep "deiauk " file.txt 

Jos tiedät, että sen on oltava rivin alussa, tarkista se:

grep "^deiauk " file.txt 

Kommentit

  • Valitettavasti kaikki muut vastaukset kuin tämä ovat virheellisiä.
  • @Shatu Kiitos! Joten anna ' s nähdä, kuinka kauan kestää " kuplia ylhäältä " … Olen ' utelias, koska haluan lisätä vastauksia vanhoihin kysymyksiin … Luulen, että sen oletetaan tekevän, mutta epäilen sitä. Se olisi vain mukavaa minulle, mutta todella hyödyllinen lukijoille. Jotta tästä olisi hyvä esimerkkitapaus, voinko pyytää sinua kirjoittamaan kommentin, jossa esitetään yhteenveto muista vastauksista, jotka puuttuvat?
  • (1) Onnittelut 10K-edustajan saavuttamisesta. Sinulla on nyt oikeus nähdä, että tämä vastaus annettiin aiemmin ja se poistettiin. (2) On aina parempi vastata kysymykseen mahdollisimman laajasti sanotun perusteella eikä antaa vastausta, joka toimii vain näytetiedoissa. Kysymyksen esimerkkitiedoista käy ilmi, että sarakkeet erotetaan välilyönneillä, mutta sitä ei ole määritelty. Kaikki muut vastaukset toimivat myös sarkaimilla erotetuissa sarakkeissa. (3) Vältit tachomin (poistettu) vastauksen kohtalokkaan virheen lisäämällä ^ – mutta kaikki muut vastaukset toimivat… (jatkuu)
  • ( Jatkuu) … jos merkkijono näkyy muussa kuin ensimmäisessä kentässä. (4) Kaikki muut vastaukset toimivat myös, jos deiauk on viimeinen kenttä (ts. Sen jälkeen ei ole mitään).

Vastaa

Huomasin, että -x toimi minulle.

Esimerkki

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

Grep-käsikirja

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

Kommentit

  • 1: 1, joka vastaa koko väliviivaa sisältävää riviä, -x ainoa vaihtoehto. Esimerkiksi grep -w "abc" <<<"abc-hac101-bb0" täsmää, mutta grep -x "abc" <<<"abc-hac101-bb0" ei

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *