Encontre nomes exclusivos contendo consoantes repetidas consecutivas

1

Estou apenas começando a aprender a usar o Ubuntu e estou tendo algumas dificuldades.

Devo usar back-referencing para encontrar nomes de garotas únicas contendo consoantes repetidas consecutivas em um arquivo de nomes de bebês que eu armazenei como allnames.txt .

Eu usei:

$ cat allnames.txt | cut -f5 | sort | uniq | grep -i 'bb\|cc\|dd\|ff\|gg\|hh\|jj\|kk\|ll\|mm\|nn\|pp\|qq\|rr\|ss\|tt\|vv\|ww\|xx\|yy\|zz'

e parece que funcionou, mas existe uma maneira mais fácil (mais curta) e possivelmente mais precisa para fazer isso?

    
por user247597 13.02.2014 / 17:03

3 respostas

1

Você pode usar -u para classificação exclusiva:

cat allnames.txt | cut -f5 | sort -u | grep -Ei '([bcdfghjklmnpqrstvwxyz])'

Aqui estamos assumindo que os campos estão separados pelo caractere de tabulação (por exemplo, This\tIs\tA\tFriend\tCarlos ), pois esse é o delimitador padrão para cut .

Se você realmente precisa fazer isso com frequência, você pode escrever um roteiro, é claro.

    
por edwin 13.02.2014 / 18:01
0

Você pode experimentar este:

cat allnames.txt | cut -f5 | sort | uniq | grep -Ei '(\w)+'

Onde -E significa permitir o uso de expressões ampliadas

\w significa qualquer Caracteres alfanuméricos mais _

referência ao caractere anterior fundada por (\w) mais uma vez

+ means Corresponde ao elemento anterior uma ou mais vezes. Por exemplo, ab + c corresponde a "abc", "abbc", "abbbc" e assim por diante, mas não "ac".

Apenas para consoantes:

cat allnames.txt | cut -f5 | sort | uniq | grep -Ei '([qrtpsdfghjklzxcvbnm])+'

Onde [qrtpsdfghjklzxcvbnm] apenas todas as consoantes

Todas as citações de Wikipedia .

    
por c0rp 13.02.2014 / 17:23
0

Considere que um arquivo ( name.txt ) contém o seguinte,

abbcfgh
askgdf
rtdhher
ueiids
oofyf
asdgfhppn
aettdo

Agora, o uso do comando a seguir imprimirá sequências de caracteres com consoantes repetidas consecutivas,

$ cat name.txt | grep -iEv '([aeiou])+' | grep -iE '([a-z])+'

abbcfgh
rtdhher
asdgfhppn
aettdo

Como funciona

grep -iEv '([aeiou])+' descarta strings com (usando correspondência invertida) vogais de repetição consecutivas. E o próximo grep -iE '([a-z])+' lista strings com consoantes repetidas consecutivas.

No seu caso, use

cat allnames.txt | cut -f5 | sort | uniq | grep -iEv '([aeiou])+' | grep -iE '([a-z])+'

Caso especial

O acima irá falhar em um caso, há alguma palavra com duas consoantes consecutivas com duas vogais consecutivas. Por exemplo, aeeoiffsa . Em tal o seguinte deve ser usado,

cat allnames.txt | cut -f5 | sort | uniq | grep -iE '([b-df-hj-np-tv-z])+'
    
por souravc 13.02.2014 / 18:00