
conjunto de palavras com 10 caracteres e que contêm uma substring de três vogais consecutivas. Até agora eu tentei esses comandos.
grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt
grep -E '^.{10}$&a*.e*.i*.o*.u*' words2.txt
Dados de entrada, extraídos via OCR deesta captura de tela:
unpernicious
unperspicuous
unpervious
unpious
unpiteous
unpiteously
unpiteousness
unplebeian
unplenteous
unportmanteaued
unportuous
unprecarious
unprecious
unprecocious
unpredacious
unpresumptuous
unpresumptuously
unpretentious
unpretentiously
unpretentiousness
unpromiscuous
unpropitious
unpropitiously
unpropitiousness
unpugnacious
unpunctilious
unquailed
unquailing
unquailingly
unqueen
unqueened
unqueening
unqueenlike
unqueenly
unquiescence
unquiescent
unquiescently
unquiet
unquietable
unquieted
unquieting
unquietly
unquietness
unquietude
unrapacious
unrebellious
unreligious
unreligiously
unreligiousness
unrighteous
unrighteously
unrighteousness
unsacrilegious
Unsagacious
unsalubrious
unsanctimonious
unsanctimoniously
unsanctimoniousness
unsanguineous
unsanguineously
unseditious
unseeable
unseeing
Responder1
Seu problema é (IMHO) melhor resolvido com awk
, mas vou apenas apontar um problema com seu comando
grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt
Para filtrar o conteúdo do arquivo word2.txt
através de ambas grep
as invocações, isso deve ser parecido com
grep -E '^.{10}$' words2.txt | grep 'a*.e*.i*.o*.u*'
O segundo grep
padrão deveria ser [auoie]{3}
, o que nos leva a
grep -E '^.{10}$' words2.txt | grep -E '[aouie]{3}'
A entrada para o primeiro grep
é o seu arquivo. A entrada para o segundo grep
é a saída do primeiro grep
,nãoseu arquivo.
Usando um POSIX awk
(como versões recentes do GNU awk
):
$ awk 'length == 10 && /[aouei]{3}/' words2.txt
unpervious
unplebeian
unportuous
unprecious
unquailing
unqueening
unquieting
unquietude
mawk
, BSD awk
e implementações históricas pré-POSIX awk
não suportam {n}
expressões regulares comoapontado por Stéphane Chazelas.
Responder2
Você acertou os 10 caracteres, mas para encontrar 3 vogais seguidas, procure um grupo [AEIOU]
:
egrep '^.{10}$' | egrep -i '[AEIOU]{3}'
Para rejeitar o espaço em branco, use isto:
egrep '^[^ \t]{10}$' | egrep -i '[AEIOu]{3}'
Responder3
Supondo 1 palavra/linha, você pode fazer isso:
sed -nE '/^.{10}$/!d;/[aAeEiIoOuU]{3}/p' words.txt
Responder4
Com grep
suporte PCRE:
grep -iPx '(?=.*[aeiou]{3}.*).{10}'
Ou:
grep -wiP '(?=\w*[aeiou]{3}\w*)\w{10}'
para procurar essas palavras quando elas não são uma por linha (adicione -o
se sua grep
implementação suportar a impressão apenas das palavras correspondentes, em vez da linha inteira em que foram encontradas). Lápalavrasignifica qualquer sequência depalavracaracteres (letras (na escrita latina, sem apenas diacríticos, adicione um (*UCP)
for letras em qualquer escrita, embora isso ainda não cubra vogais como é
ou α
), dígitos e sublinhado).