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
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
grepedorg.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. Esimerkiksigrep -w "abc" <<<"abc-hac101-bb0"
täsmää, muttagrep -x "abc" <<<"abc-hac101-bb0"
ei
grep -w
? (Tämä vaihtoehto on juuri tätä tarkoitusta varten ja se toimii minulle.) – Huomaa: vaihtoehto-x
vastaa koko riviä.deiauk
/ " Tarvitsen vain tämän:deiauk 1611516 afsdf 765
" – mitä tarvitset?