Como eu mostraria 5 vogais em uma linha com o grep de um arquivo?

1

Eu tentei fazer isso, mas não funciona. Não retorna nada, em vez de uma lista de caracteres.

grep  ?*\[aeiouAEIOU]\{5\}?* words
    
por Helpplz 31.01.2018 / 23:38

3 respostas

2

Assumi que você deseja exibir linhas com 5 vogais seguidas.

grep  "[aeiouAEIOU]\{5\}" words

Você não precisa de \ no [ . Eu não tenho idéia do que é o ?* s. E você precisa citá-lo para impedir que o shell interprete * s e ? s.

    
por 01.02.2018 / 00:01
1
grep -o -E '[aeiouAEIOU]{5}' words

Eu suspeito que o problema é que as estrelas em sua sintaxe foram expandidas por nome de arquivo pelo shell e o grep não as viu, além de você ter escapado de um colchete de abertura e não ter escapado do fechamento correspondente. Mas por que usar a sintaxe complicada quando há uma mais simples?

    
por 01.02.2018 / 00:07
0

Para exibir somente as cinco vogais, use a opção -o .

O comutador -E permite usar chaves diretamente (sem escape).

Para insensibilidade a maiúsculas e minúsculas você usa a opção -i .

Então, por exemplo.

echo "AKAAJEJEaeiooXXX" | grep -Eio '[aeiou]{5}'

exibirá Eaeio. Sem o comutador -o, toda a linha será gerada.

Se você quiser exibir a linha apenas se ela contiver 5 vogais (ou seja, não seis), é um pouco mais complicado; você precisa especificar que as cinco vogais não devem tocar outras vogais. E administre os casos de fronteira onde eles tocam o começo ou o fim da linha.

grep -Ei '([^aeiou]|^)[aeiou]{5}([^aeiou]|$)'

Isso evita o uso da opção -o, já que a borda "não correspondente" agora faz parte do padrão encontrado. Você pode usar o switch e usar um pipe para um segundo grep com cinco vogais apenas para refinar ainda mais a saída.

    
por 01.02.2018 / 01:09

Tags