Eu quero escrever um script bash para imprimir todas as permutações possíveis de maiúsculas e minúsculas de uma determinada palavra, por exemplo, harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Minha solução ingênua é escrever um n-ésimo (n é len (word)) aninhado for-loop para esta palavra específica:
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
No entanto, eu teria que codificar o script para uma palavra diferente novamente.
Existe uma maneira melhor de conseguir isso?
printf '%s\n' {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
printf
sed 's/./{&,&}/g'
girariaFoo
em{F,F}{o,o}{o,o}
, o que seria bastante inútil. Mas adicione\U
e\L
e você começa a maiúsculas e minúsculas de cada letra; ou seja,{F,f}{O,o}{O,o}
.eval
o comando para dizer ao shell para expandir as seqüências de chaves { X , x }.fonte
EDIT 2: Esta resposta está errada. Não produz 2 ^ n combinações como deveria.
EDIT: Eu não sei por que, mas esta solução é realmente rápida em comparação com a solução perl de @Joeseph R. Ele roda "Supercalifragilisticexpialidocious" em menos de 0,3 segundos!
Aqui está a minha rachadura:
Executando:
Sinta-se livre para bifurcar e modificá-lo, tenho certeza de que pode ser otimizado. https://gist.github.com/ryanmjacobs/4c02ad80f833dee0c307
fonte
harley
você deve ter 64 resultados, onde estáharLEY
, por exemplo?Se você preferir usar ferramentas prontas em vez de codificar, poderá usar o TextMechanic (ferramenta de gerador de permutação / combinação) e o Unit-Conversion.info
fonte