Como grep uma palavra inteira contendo um ponto (.)

0

Meu arquivo contém o seguinte texto

xyz.com       123  321
xyz.com.br    123  123
abcd.xyz.com  123  321

Eu quero usar a linha que contém xyz.com sozinha. ou seja, a saída deve ser a primeira linha.

 xyz.com   123  321

Tentei o seguinte, mas não adiantou.

grep "^xyz.com$" file.txt
grep '^xyz.com$' file.txt
grep -w xyz.com file.txt
grep '^xyz.com$' file.txt
grep '^xyz\.com$' file.txt
grep -Fx xyz.com file.txt
grep -w 'xyz.com' file.txt
grep -w 'xyz\.com' file.txt
grep '\sxyz.com\s' file.txt
grep '\bxyz.com\b' file.txt
grep "\bxyz.com\b" file.txt
grep "\<xyz.com\>" file.txt
grep '\<xyz.com\>' file.txt
grep -w -l "xyz\.com" file.txt
grep -w "xyz\.com" file.txt
grep -wF "xyz\.com" file.txt
grep -w "xyz\.com$" file.txt
grep -w "xyz\.com\$" file.txt

O shell é bash. Obrigado.

    
por bash_it 22.10.2015 / 08:36

2 respostas

0

$ grep '^xyz\.com[[:space:]]' file.txt
xyz.com      123 321
$ grep -P '^xyz\.com\s' file.txt
xyz.com      123 321

O primeiro usa a maneira POSIXy de combinar espaços em branco, o segundo usa perly, o que significa que você precisa especificar com -P usando expressões regulares perl.

    
por 22.10.2015 / 08:44
0

No seu exemplo, a linha não contém xyz.com sozinha, contém mais colunas com números. É por isso que '^xyz\.com$' não funcionou. Experimente:

grep '^xyz\.com\s' file.text

O \s adicionado ao final da expressão força um caractere de espaço logo após a string pesquisada e permite outro texto depois.

Para incluir o caso de uma linha apenas com a string de pesquisa, tente:

grep '^xyz\.com\(\s.*\)\?$' file.txt

Isso permitirá que a linha termine logo após a string, mas exija um espaço em qualquer outro caso.

Veja regular-expressions.info para mais informações sobre expressões regulares.

    
por 22.10.2015 / 08:42

Tags