Script de bash com grep -w

2

Estou usando o seguinte comando: x.txt | grep -w 'in' e eu estou recebendo respostas como: em para dentro ... etc.

Eu só quero a resposta: em

Como devo modificar o comando?

    
por NewBo 08.04.2012 / 14:18

1 resposta

2

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.

    
por 08.04.2012 / 14:35

Tags