Odpowiedzi:
Po pierwsze, polecenie powinno być
grep -w in x.txt
Twój bieżący potok nie działa i zbędne jest cattworzenie pliku w potoku. grepmoże czytać pliki bezpośrednio.
Po drugie, -wrobi dokładnie to, co chcesz. Ze strony podręcznika:
-w, --word-regexp
Wybierz tylko te wiersze zawierające dopasowania, które tworzą całe słowa. Test polega na tym, że pasujące podciągi muszą znajdować się na początku wiersza lub poprzedzone znakiem składającym się z innych słów. Podobnie musi znajdować się na końcu wiersza lub musi zawierać znak nie będący składnikiem. Znaki składające się na słowo to litery, cyfry i znak podkreślenia.
grepzwróci pełne wiersze, w których występuje słowo; taka jest funkcja grep; Wspominam o tym, aby sprawdzić, czy przez to się nie pomylisz.
Jeśli chcesz tylko zwrócić słowo, tak jak mówisz, możesz to zrobić
grep -ow in x.txt
ponieważ -ozwraca tylko pasującą część, ale wydaje się to dość bezowocne. Co naprawdę próbujesz zrobić?
EDYCJA: wyraźny przykład:
$ cat test
word in word
within word
word word
$ grep -w in test
word in word
„w” nie pasuje.
EDYCJA 2: Kolejny przykład:
$ grep '\<in\>' test
word in word
EDYCJA 3: Podano, że problem dotyczy szwedzkich znaków. Mogę to odtworzyć, nawet jeśli zmienna środowiskowa jest LANGustawiona na sv_SE.UTF-8. https://stackoverflow.com/questions/9260293/egrep-accented-characters-not-recognised-as-part-of-a-word sugeruje użycie Perla dla określonych zadań UTF-8 jako najprostszego rozwiązania.
EDIT4: Wydaje się, że mogę użyć sedtej pracy ze szwedzkimi postaciami:
$ cat test
word den word
avträden word
word word
$ sed -n '/\bden\b/p' test
word den word
$ sed -n '/\<den\>/p' test
word den word
Jest to pragmatyczne rozwiązanie, ale mam nadzieję, że zadziała do tego zadania.
-wdziała. Czy to nie dziala Podaj wyraźny przykład, w którym to nie działa. Zrobiłem teraz przypadek testowy i wszystko, co mogę powiedzieć, działa tak, jak chcesz.
grepswojego systemu? Jest -wopisany? W przeciwnym razie, można wymieniać -w inna '\<in\>', jak starałem się opisać w obecnie usunięty odpowiedź. Może to być także dziwny błąd Unicode w OSX, ale najpierw wypróbuj powyższe.
seddo obejścia problemu.