Скрипт Bash с grep -w

Скрипт Bash с grep -w

Я использую следующую команду: 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

Это прагматичное решение, но, надеюсь, оно сработает для данной задачи.

Связанный контент