Dopasuj dokładny ciąg za pomocą grep


63

Mam plik tekstowy:

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 chcę dokładnie dopasować deiauk. Kiedy to zrobię:

grep "deiauk" file.txt

Otrzymuję ten wynik:

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

ale potrzebuję tylko tego:

deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd

Wiem, że istnieje -wopcja, ale wtedy mój sznur musi przeciąć całą linię.


4
Czy rzeczywiście próbowałeś grep -w? (Ta opcja jest właśnie do tego celu i działa dla mnie.) - Uwaga: opcja -xpasuje do całej linii.
Janis

„Chcę dokładnie dopasowaćdeiauk / „ Potrzebuję tylko tego: deiauk 1611516 afsdf 765 - którego potrzebujesz?
Alex

Odpowiedzi:


127

Wypróbuj jedną z:

grep -w "deiauk" textfile

grep "\<deiauk\>" textfile

3
Jeśli masz kreskę ( - ) na końcu łańcucha, skrypt przyniesie go w wyniku, czego nie oczekiwano.
Evis,

Prawidłowy @Evert: słowa zawierają tylko znaki alfabetu, cyfry i znaki podkreślenia, więc jeśli masz skróty lub inne znaki dzielone, to nie działa.
ingyhere

@ Cyrus Nauczyłem się drugiego, używając *komendy vi / vim do słów.
shuva

Nie działa z żadną postacią specjalną, na którą ma org.apache.avro avroochotę org.apache.avro avro+mapred( na przykład *)
Vishrant


7

Jeśli Twoje grepwsparcie -P(PCRE), możesz:

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

4
To jedyna odpowiedź, która działa z łączonymi wyrazami.
ingyhere

5

W zależności od rzeczywistych danych możesz poszukać słowa, po którym następuje spacja:

grep 'deiauk ' file.txt 

Jeśli wiesz, że musi to być na początku linii, sprawdź, czy:

grep '^deiauk ' file.txt 

Niestety, wszystkie inne odpowiedzi są nieprawidłowe.
Shatu

@Shatu Thanks! Zobaczmy więc, ile czasu zajmuje „bąbelkowanie na szczyt” ... Jestem ciekawy, ponieważ lubię dodawać odpowiedzi na stare pytania ... Myślę, że tak jest, ale wątpię. Byłoby dla mnie po prostu miłe, ale w rzeczywistości przydatne dla czytelników. Aby uczynić z tego dobry przykład, czy mógłbym poprosić cię o napisanie komentarza podsumowującego brak innych odpowiedzi?
Volker Siegel

(1) Gratulujemy osiągnięcia 10 000 powtórzeń. Masz teraz przywilej, aby zobaczyć, że ta odpowiedź została podana wcześniej i została usunięta. (2) Zawsze lepiej jest odpowiedzieć na pytanie tak szeroko, jak to możliwe, w oparciu o to, co zostało powiedziane, i nie dawać odpowiedzi, która działa tylko na przykładowe dane. Z przykładowych danych w pytaniu wynika, że ​​kolumny są oddzielone spacjami - ale nie jest to określone. Wszystkie pozostałe odpowiedzi będą działać również w przypadku kolumn oddzielonych tabulatorami. (3) Uniknąłeś fatalnej wady w odpowiedzi Tachomi (usuniętej), dodając ^- ale wszystkie pozostałe odpowiedzi działają… ( ciąg dalszy )
G-Man

(Ciąg dalszy)… jeśli ciąg pojawia się w polu innym niż pierwsze. (4) Ponadto wszystkie pozostałe odpowiedzi działają, jeśli „deiauk” jest ostatnim polem (tzn. Po nim nic nie ma).
G-Man,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.