
Estou usando o seguinte comando: x.txt | grep -w 'in' e estou recebendo respostas como: in into ... etc.
Eu só quero a resposta: em
Como devo modificar o comando?
Responder1
Primeiro, o comando deve ser
grep -w in x.txt
Seu canal atual não funciona e é desnecessário para cat
o arquivo apenas canalizá-lo. grep
pode ler arquivos diretamente.
Em segundo lugar, o -w
faz exatamente o que você deseja. Na página de manual:
-w, --palavra-regexp
Selecione apenas as linhas que contêm correspondências que formam palavras inteiras. O teste é que a substring correspondente deve estar no início da linha ou precedida por um caractere constituinte que não seja de palavra. Da mesma forma, deve estar no final da linha ou seguido por um caractere constituinte que não seja de palavra. Os caracteres constituintes da palavra são letras, dígitos e sublinhado.
grep
retornará olinhas completasonde a palavra ocorre; essa é a função de grep
; Menciono isso para garantir que você não fique confuso por causa disso.
Se vocêapenasquiser retornar a palavra, como você diz, você pode fazer
grep -ow in x.txt
since -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" não é correspondido.
EDITAR2:Outro exemplo:
$ grep '\<in\>' test
word in word
EDITAR3:Foi dado que o problema estava nos caracteres suecos. Posso reproduzir isso, mesmo com a variável de ambiente LANG
definida como sv_SE.UTF-8
.https://stackoverflow.com/questions/9260293/egrep-accented-characters-not-recognised-as-part-of-a-wordsugere usar Perl para tarefas específicas de UTF-8 como a solução mais fácil.
EDITAR4:Parece que posso usar sed
para fazer isso funcionar 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 espero que funcione para esta tarefa.