回答:
少し良い解決策:
echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
完全なスケーラビリティの場合:
echo harley \
| perl -nle 'print "echo ",
join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c "{}"
行ごとに1つの単語が絶対に必要な場合は、
for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done
mattdmのコメントのおかげ
対応するスケーラブルバージョンは次のとおりです。
echo harley \
| perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c 'for w in {};do echo $w;done'
楽しみのために、「harley」を「supercalifragilisticexpialidocious」に置き換えてみてください5分経ちましたが、私のコンピューターはまだこのコンピューター上で動き回っており、おそらく終了することはありません:)
printf '%s\n' {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
printf
eval echo $(echo " word " | sed 's /./ {\ U&、\ L&} / g')
sed 's/./{&,&}/g'
になりますFoo
が{F,F}{o,o}{o,o}
、これはまったく役に立たないでしょう。ただし、\U
and \L
を追加すると、各文字の大文字と小文字が取得されます。すなわち、{F,f}{O,o}{O,o}
。eval
、{ X、x }中括弧シーケンスを展開するようにシェルに指示するために使用するのは簡単なことです。編集2:この答えは間違っています。必要な2 ^ nの組み合わせは生成されません。
編集:理由はわかりませんが、この解決策は本当に @Joeseph R.それによってperlのソリューション未満0.3秒で「Supercalifragilisticexpialidocious」を実行しますに比べて速いです!
ここに私の亀裂があります:
#!/bin/bash
str=${1^^} # convert to uppercase
len=${#str} # get length of string
for ((perm=0; perm <= len; perm++)); do
for ((i=0; i <= len; i++)); do
lower=${str,,} # convert to lowercase
# Uppercase n-th letter for permutation
if [ $perm -gt 0 ]; then
nth=${lower:perm-1}
lower=$(echo ${lower:0:perm-1}${nth^})
fi
echo -n ${str:0:i} # print orig string from 0 to $i
echo ${lower:i} # print new string from $i to end
done
done | sort -u
実行する:
$ ./permutations.sh hi
hi
hI
Hi
HI
$ ./permutations.sh harley
harley
harleY
harlEy
harLey
haRley
hArley
Harley
HarleY
HarlEy
HarLey
HaRley
HArley
HArleY
HArlEy
HArLey
HARley
HARleY
HARlEy
HARLey
HARLeY
HARLEy
HARLEY
自由にフォークして変更してください。最適化できると確信しています。https://gist.github.com/ryanmjacobs/4c02ad80f833dee0c307
harley
、あなたは64件の結果、の持っている必要がありますharLEY
たとえば、?
コーディングの代わりに既製のツールを使用する場合は、TextMechanic(置換/組み合わせジェネレーターツール)とUnit-Conversion.infoを使用できます。