Я хочу написать скрипт bash для печати всех возможных подстановок в нижнем и верхнем регистре определенного слова, например, harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Мое наивное решение состоит в том, чтобы написать n-й (n is len (word)) вложенный цикл for для этого конкретного слова:
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
Однако мне пришлось бы снова написать код для другого слова.
Есть ли лучший способ сделать это?
printf '%s\n' {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
printf
sed 's/./{&,&}/g'
превратитсяFoo
в{F,F}{o,o}{o,o}
, что было бы довольно бесполезно. Но добавьте\U
и,\L
и вы получите верхний и нижний регистр каждой буквы; то есть{F,f}{O,o}{O,o}
.eval
сказать оболочке, чтобы она расширила последовательности фигурных скобок { X , x }.источник
РЕДАКТИРОВАТЬ 2: Этот ответ неверен. Он не производит 2 ^ n комбинаций, как следует.
РЕДАКТИРОВАТЬ: я не знаю почему, но это решение действительно быстро по сравнению с решением Perl @Joeseph R. Он запускает "Supercalifragilisticexpialidocious" менее чем за 0,3 секунды!
Вот моя трещина в этом:
Запуск это:
Не стесняйтесь раскошелиться и изменить его, я уверен, что он может быть оптимизирован. https://gist.github.com/ryanmjacobs/4c02ad80f833dee0c307
источник
harley
вами должно быть 64 результата, гдеharLEY
, например?Если вы предпочитаете использовать готовые инструменты вместо кодирования, вы можете использовать TextMechanic (инструмент перестановки / генератор комбинаций) и Unit-Conversion.info
источник