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 ja chcesz dopasować dokładnie deiauk. Kiedy to robię:

grep "deiauk" file.txt 

Otrzymuję taki wynik:

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

ale ja potrzebuję tylko tego:

deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Wiem, że jest opcja „-w, ale wtedy mój ciąg musi zostać wykonany w całości

Komentarze

  • Czy faktycznie próbowałeś grep -w? (Ta opcja jest dokładnie do tego celu i działa dla mnie.) – Uwaga: opcja -x pasuje do całej linii.
  • " Chcę dopasować dokładnie deiauk / " Potrzebuję tylko tego: deiauk 1611516 afsdf 765 " – czego potrzebujesz?

Odpowiedź

Wypróbuj jedną z:

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

Komentarze

  • Jeśli masz myślnik () na końcu ciągu ten skrypt przyniesie wynik, czego nie oczekiwano.
  • Popraw @Eve rt: Słowa zawierają tylko znaki alfa, cyfry i podkreślenia, więc jeśli masz skróty lub inne elementy, to nie działa.
  • @ Cyrus Nauczyłem się drugiego podczas używania vi / vim * na słowach.
  • Nie działa dla żadnego specjalnego znaku, na przykład org.apache.avro avro z org.apache.avro avro+mapred (próbowano z *)
  • Użyj -wE , aby uzyskać dokładne informacje dopasowanie wielu słów (logiczne OR)

Odpowiedź

Spróbuj tego z GNU grep i oznacz granice słów \b:

grep "\bdeiauk\b" file 

Wynik:

 deiauk 1611516 afsdf 765 

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

Komentarze

  • Dziękuję, ale dlaczego to nie działa? echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
  • Wypróbuj grep "\b${vard}\b" file.txt
  • nadal nie ' t działa: /
  • Ty ' będziesz potrzebować read: read -p "Enter login: " vard; grep "\b${vard}\b" file.txt

Odpowiedź

Jeśli grep obsługuje -P (PCRE), możesz to zrobić:

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

Komentarze

  • To jedyna odpowiedź, która działa ze słowami z łącznikami.
  • Dlaczego \K ( Czy potrzebny jest reset PCRE na początku meczu)? To proponowane rozwiązanie wydaje się działać dobrze bez niego.

Odpowiedź

W zależności od prawdziwych danych poszukaj słowa, po którym następuje spacja:

grep "deiauk " file.txt 

Jeśli wiesz, że musi znajdować się na początku linii, sprawdź, czy:

grep "^deiauk " file.txt 

Komentarze

  • Niestety wszystkie inne odpowiedzi są niepoprawne.
  • @Shatu Thanks! Pozwól więc ' zobaczyć, ile czasu zajmie, zanim " pojawi się na górze " … Ja ' Jestem zaciekawiony, ponieważ lubię dodawać odpowiedzi na stare pytania … Wydaje mi się, że tak jest, ale wątpię. Byłoby to dla mnie po prostu miłe, ale faktycznie przydatne dla czytelników. Aby uczynić to dobrym przykładem, czy mogę prosić o napisanie komentarza podsumowującego brakujące odpowiedzi w innych odpowiedziach?
  • (1) Gratulujemy osiągnięcia 10 tys. Powtórzeń. Masz teraz przywilej zobaczyć, że ta odpowiedź została udzielona 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 podawać odpowiedzi, która działa tylko w przypadku przykładowych danych. Z przykładowych danych w pytaniu wynika, że kolumny są oddzielone spacjami – ale nie zostało to określone. Wszystkie inne odpowiedzi będą również działać w przypadku kolumn rozdzielonych tabulatorami. (3) Uniknąłeś fatalnego błędu w (usuniętej) odpowiedzi tachomi, dodając ^ – ale wszystkie inne odpowiedzi działają… (cd.)
  • ( Cd)… jeśli ciąg występuje w polu innym niż pierwsze. (4) Ponadto wszystkie inne odpowiedzi działają, jeśli „deiauk” jest ostatnim polem (tj. Po nim nic nie ma).

Odpowiedz

Znalazłem -x działało dla mnie.

Przykład

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

Komentarze

  • Aby dopasować 1: 1 cały wiersz zawierający łączniki, -x jedyna opcja. Na przykład grep -w "abc" <<<"abc-hac101-bb0" będzie pasować, ale grep -x "abc" <<<"abc-hac101-bb0" nie będzie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *