Primeiro, o comando deve ser
grep -w in x.txt
Seu pipe atual não funciona, e é desnecessário cat
o arquivo apenas para canalizá-lo. grep
pode ler arquivos diretamente.
Em segundo lugar, o -w
faz exatamente o que você deseja. Na página do manual:
-w, --word-regexp
Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore.
grep
retornará as linhas completas onde a palavra ocorre; essa é a função de grep
; Eu mencionei para verificar se você não se confunde por causa disso.
Se você apenas quiser retornar a palavra, como você diz, você pode fazer
grep -ow in x.txt
desde -o
retorna apenas a parte correspondente, mas isso parece bastante infrutífero. O que você está realmente tentando fazer?
EDITAR: Um exemplo explícito:
$ cat test
word in word
within word
word word
$ grep -w in test
word in word
"dentro de" não é correspondido.
EDIT2: Outro exemplo:
$ grep '\<in\>' test
word in word
EDIT3: Foi dado que o problema era com caracteres suecos. Eu posso reproduzir isso, mesmo com a variável de ambiente LANG
definida como sv_SE.UTF-8
. link sugere o uso do Perl para UTF-8 tarefas específicas como a solução mais fácil.
EDIT4: parece que posso usar sed
para trabalhar com caracteres suecos:
$ 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
É uma solução pragmática, mas esperamos que funcione para essa tarefa.