grep -Eow '\w{10}' | grep -v '\(.\).*'
exclui palavras com dois caracteres idênticos.
grep -Eow '\w{10}' | grep -v '\(.\)'
exclui os que têm caracteres repetidos.
POSIXly:
tr -cs '[:alnum:]_' '[\n*]' |
grep -xE '.{10}' |
grep -v '\(.\).*'
tr coloca palavras em sua própria linha convertendo qualquer equação de s de caracteres não-palavra ( c omplemento de alfanumérico e sublinhado) para uma nova linha personagem.
Ou com um grep :
tr -cs '[:alnum:]_' '[\n*]' |
grep -ve '^.\{0,9\}$' -e '.\{11\}' -e '\(.\).*'
(exclua linhas com menos de 10 e mais de 10 caracteres e aquelas com um caractere aparecendo pelo menos duas vezes).
Com apenas grep (grep do GNU com suporte a PCRE ou pcregrep ):
grep -Po '\b(?:(\w)(?!\w*)){10}\b'
Ou seja, um limite de palavra ( \b ) seguido por uma sequência de 10 caracteres de palavra (desde que cada um não seja seguido por uma seqüência de caracteres de palavra e por eles mesmos, usando o operador de look-ahead (?!...) ) .
Temos sorte de que isso funcione aqui, já que muitos mecanismos de regexp não funcionam com referências anteriores dentro de partes repetitivas.
Note que (com a minha versão do GNU grep, pelo menos)
grep -Pow '(?:(\w)(?!\w*)){10}'
Não funciona, mas
grep -Pow '(?:(\w)(?!\w*)){10}'
faz (como echo aa | grep -Pw '(.)' ) o que soa como um bug.
Você pode querer:
grep -Po '(*UCP)\b(?:(\w)(?!\w*)){10}\b'
se você quiser que \w ou \b considere qualquer letra como um componente de palavra e não apenas os caracteres ASCII em locais não-ASCII.
Outra alternativa:
grep -Po '\b(?!\w*(\w)\w*)\w{10}\b'
Esse é um limite de palavra (um que não é seguido por uma sequência de caracteres de palavra, um dos quais se repete) seguido por caracteres de 10 palavras.
Coisas que possivelmente podem ter no fundo da mente:
- A comparação faz distinção entre maiúsculas e minúsculas, portanto,
Babylonish, por exemplo, corresponderia, pois todos os caracteres são diferentes, embora haja doisBs, um inferior e um maiúsculo (use-ipara alterar isso). - para
-w,\we\b, uma palavra é uma letra (somente ASCII para GNUgreppor enquanto , a classe de caractere[:alpha:]em sua localidade se estiver usando-Pe(*UCP)), dígitos decimais ou sublinhado . - significa que
c'est(duas palavras de acordo com a definição francesa de uma palavra) ouit's(uma palavra de acordo com algumas definições inglesas de uma palavra) ourendez-vous(uma palavra de acordo com a definição francesa de uma palavra) não são considerados uma palavra. - Mesmo com
(*UCP), os caracteres combinados Unicode não são considerados como componentes de palavras, portanto,téléphone($'t\u00e9le\u0301phone') é considerado como 10 caracteres, um deles não alfa.défavorisé($'d\u00e9favorise\u0301') seria correspondido, embora tenha doisé, porque são 10 caracteres alfa diferentes seguidos por um acento agudo de combinação (não alfa, portanto há um limite de palavras entre oee seu sotaque ).