Como usar o grep para pesquisar palavras com um número específico de ocorrências

0

Como posso pesquisar um texto em um arquivo que corresponda a essa condição: começa com 'x' e tem pelo menos 1 'a' imediatamente após o 'x' e no máximo 2 'a' imediatamente após o 'a'.

Eu tentei algo como

grep -i ^xa{1..2} textfile.txt

mas acho que não estou entendendo o uso dele

    
por user254679 09.10.2017 / 05:12

3 respostas

1

$ cat ip.txt 
xe
xa
xaaaalt
xaaa
xaa

$ # match 'a' 1 to 3 times
$ grep -i '^xa\{1,3\}' ip.txt
xa
xaaaalt
xaaa
xaa

$ # with ERE, no need to escape {}
$ grep -iE '^xa{1,3}' ip.txt
xa
xaaaalt
xaaa
xaa

Para evitar a correspondência de mais de três a correspondentes consecutivas, você precisará

$ grep -iE '^xa{1,3}([^a]|$)' ip.txt
xa
xaaa
xaa

$ # or lookarounds with PCRE
$ grep -iP '^xa{1,3}(?!a)' ip.txt
xa
xaaa
xaa
    
por 09.10.2017 / 06:06
0

Você estava perto:

grep -i -E '^xaa{0,2}' textfile.txt

A sintaxe {n,m} (com , e não .. ) é um regexp estendido, portanto, a opção -E . { e } precisam ser citados para que o shell não os interprete.

    
por 09.10.2017 / 05:18
0

Dada a entrada

1       x
2       xa
3       xaa
4       xaaa
5       xaaaa

As linhas 2, 3 e 4 serão retornadas por

grep -wE 'xa{1,3}'

A expressão regular estendida xa{1,3} corresponderá a qualquer x seguido por entre 1 e 3 a . A opção -w para grep garante que o texto correspondente na entrada seja uma palavra completa (e é por isso que a linha 5 não é retornada).

    
por 09.10.2017 / 07:57

Tags