Usando o grep para encontrar uma palavra contendo cada letra no máximo 1 vez

1

Eu tenho um grande arquivo de texto onde cada palavra é colocada em uma linha diferente, Eu preciso encontrar cada palavra que contenha qualquer letra no máximo uma vez

(Exemplos de palavras que preciso encontrar: dedos, carvão, sonho, eu, amendoim)

(Exemplos de palavras que não tenho permissão para receber na saída: teste (contém 2 t), sério (contém 2 s), zepelin (contém 2 e's))

    
por Dieter 18.10.2018 / 16:34

1 resposta

2

Usando o GNU sed :

sed -E '/(.).*/d' <file

Com o GNU sed , pode-se usar um grupo de captura e uma referência de retorno em uma expressão regular como essa. Capturamos um único caractere com (.) , seguido por qualquer número de outros caracteres e, em seguida, esse mesmo caractere novamente. Se o padrão corresponder, a linha será excluída da entrada, caso contrário, será impressa.

Exemplo:

$ cat file
coal
dream
fingers
me
peanut
serious
zepelin
$ sed -E '/(.).*/d' <file
coal
dream
fingers
me
peanut

Encontrando as palavras com caracteres repetidos:

$ sed -E '/(.).*/!d' <file
serious
zepelin

Isto também parece funcionar com o GNU grep :

$ grep -vE '(.).*' <file
coal
dream
fingers
me
peanut
$ grep -E '(.).*' <file
serious
zepelin
    
por 18.10.2018 / 16:57

Tags