Я использую следующую команду: x.txt | grep -w 'in', и я получаю ответы типа: в в ... и т. д.
Я только хочу ответ: в
Как я должен изменить команду?
Во-первых, команда должна быть
grep -w in x.txt
Ваш текущий канал не работает, и нет необходимости cat
за файлом только для его передачи. grep
может читать файлы напрямую.
Во-вторых, -w
делает именно то, что вы хотите. Со страницы руководства:
-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
"внутри" не совпадает.
EDIT2: еще один пример:
$ grep '\<in\>' test
word in word
РЕДАКТИРОВАТЬ 3: Было сказано, что проблема была со шведскими символами. Я могу воспроизвести это, даже если переменная окружения LANG
установлена в sv_SE.UTF-8
. https://stackoverflow.com/questions/9260293/egrep-accented-characters-not-recognised-as-part-of-a-word предлагает использовать 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
Это прагматичное решение, но, надеюсь, оно подойдет для этой задачи.