
Я использую следующую команду: x.txt | grep -w 'in' и получаю ответы типа: in into ... и т. д.
Я только хочу получить ответ: в
Как мне изменить команду?
решение1
Во-первых, команда должна быть
grep -w in x.txt
Ваш текущий канал не работает, и нет необходимости cat
просто передавать его файлу. grep
Может читать файлы напрямую.
Во-вторых, -w
делает именно то, что вам нужно. Из man-страницы:
-w, --word-regexp
Выбирайте только те строки, которые содержат совпадения, образующие целые слова. Проверка заключается в том, что совпадающая подстрока должна быть либо в начале строки, либо ей должен предшествовать не являющийся частью слова символ. Аналогично, она должна быть либо в конце строки, либо за ней должен следовать не являющийся частью слова символ. Символы, образующие слово, — это буквы, цифры и подчеркивание.
grep
вернетполные линииОднако где встречается это слово; это функция grep
; я упоминаю об этом, чтобы убедиться, что вы не запутаетесь из-за этого.
Если вытолькохотите вернуть слово, как вы говорите, вы можете сделать
grep -ow in x.txt
поскольку -o
возвращает только совпадающую часть, но это кажется совершенно бесполезным.Что вы на самом деле пытаетесь сделать?
РЕДАКТИРОВАТЬ:Яркий пример:
$ cat test
word in word
within word
word word
$ grep -w in test
word in word
«внутри» не совпадает.
ПРАВКА2:Другой пример:
$ grep '\<in\>' test
word in word
РЕДАКТИРОВАНИЕ3:Было указано, что проблема была со шведскими символами. Я могу это воспроизвести, даже если переменная окружения LANG
установлена на sv_SE.UTF-8
.https://stackoverflow.com/questions/9260293/egrep-ударенные-символы-не-распознанные-как-часть-словапредлагает использовать Perl для специфических задач UTF-8 как наиболее простое решение.
РЕДАКТИРОВАНИЕ4:Кажется, я могу использовать sed
это, чтобы заставить работать шведские символы:
$ 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
Это прагматичное решение, но, надеюсь, оно сработает для данной задачи.