Powinieneś przeformułować swoje pierwotne pytanie, aby określić, że problem dotyczy konkretnych znaków UTF-8. Spójrz również na „EDIT4” w mojej odpowiedzi poniżej, gdzie używam seddo obejścia problemu.
Daniel Andersson
Odpowiedzi:
2
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
Chodziło mi o to, że chcę tylko linii, w której występuje całe słowo, tj. Linii, w której występuje „in”, ale nie linii, w której występuje „wewnątrz”.
NewBo
2
Tak, ale właśnie to -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.
Daniel Andersson
grep -w "den" ./sv_enb.txt daje wynik den; it avträden; privies (używam OSX)
NewBo
OSX może równie dobrze być odpowiedni. Czy przeglądałeś instrukcję obsługi 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.
Daniel Andersson
grep "\ <den \>" ./sv_enb.txt daje den; it avträden; privies. Kiedy czytam strony podręcznika są one takie same jak inne strony podręcznika dla grep, brak specjalnych informacji o poleceniu w OSX (lub OpenBSD).
sed
do obejścia problemu.Odpowiedzi:
Po pierwsze, polecenie powinno być
Twój bieżący potok nie działa i zbędne jest
cat
tworzenie pliku w potoku.grep
może czytać pliki bezpośrednio.Po drugie,
-w
robi dokładnie to, co chcesz. Ze strony podręcznika:grep
zwróci pełne wiersze, w których występuje słowo; taka jest funkcjagrep
; 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ć
ponieważ
-o
zwraca tylko pasującą część, ale wydaje się to dość bezowocne. Co naprawdę próbujesz zrobić?EDYCJA: wyraźny przykład:
„w” nie pasuje.
EDYCJA 2: Kolejny przykład:
EDYCJA 3: Podano, że problem dotyczy szwedzkich znaków. Mogę to odtworzyć, nawet jeśli zmienna środowiskowa jest
LANG
ustawiona nasv_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ć
sed
tej pracy ze szwedzkimi postaciami:Jest to pragmatyczne rozwiązanie, ale mam nadzieję, że zadziała do tego zadania.
źródło
-w
dział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.grep
swojego systemu? Jest-w
opisany? W przeciwnym razie, można wymieniać-w in
na'\<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.