ふと、コンソール上で特定の単語の文字組み合わせを取得するにはどうすればよいのかなと思ったので、ちょっと調べてみた。 ブレース展開を増殖させる方法でどうにか…と思ったけど、無駄に長くなったうえに、文字すべての組み合わせになってしまう。 これをどうにかする方法は見つけることができなかった…。

TEST=$(echo test) && eval echo  $(eval echo $(echo $TEST | xargs -I@ sh -c 'echo \"{$(echo @ | sed "s/./&,/g;s/.$//g")}\"{$(echo @ | sed "s/./,/g;s/.$//g")}') | tr -d ' ' ) | tr ' ' '\n' | sort | uniq
blacknon@BS-PUB-UBUNTU-01:~$ TEST=$(echo test) && eval echo  $(eval echo $(echo $TEST | xargs -I@ sh -c 'echo \"{$(echo @ | sed "s/./&,/g;s/.$//g")}\"{$(echo @ | sed "s/./,/g;s/.$//g")}') | tr -d ' ' ) | tr ' ' '\n' | sort | uniq | wc -l
81

1. crunchコマンドを用いる

ペネトレーションテストに用いる辞書ファイルの生成ツール。 たぶんこれが一番楽。 使用する文字列を指定する前に「-p」でpermutationフラグを立てることで、文字列を入れ替えたもののみ生成してくれる。

インストール方法は以下。 ダウンロードのリンクはこちらから最新のものを確認するとよいだろう。 なお、Debian/Ubuntu系ならaptで、OS Xであればbrewでインストールできる。

wget https://downloads.sourceforge.net/project/crunch-wordlist/crunch-wordlist/crunch-3.6.tgz
tar xzvf crunch-3.6.tgz
cd crunch-3.6
make && make install

その他

sudo apt install -y crunch # Debian/Ubuntu系の場合
brew install crunch # OS Xの場合

実行

実行方法は以下。

crunch 0 0 -p Strings

2. Rubyを用いる方法

Rubyを使うと結構簡単に書けるようだ。 crunchが入れられない環境でも、Rubyなら使えることが多いだろう。

echo Keyword | ruby -ne '$_.chomp.chars.to_a.permutation{|x| puts x.join}'

3. Pythonを用いる場合

一応、Pythonでも同様の処理が可能だ。 Pythonであればバンドルされていることも多いので、Rubyも入れられないならこちらを使うとよいだろう。

echo test | python -c "import sys;from itertools import permutations as p; print('\n'.join([''.join(item) for item in p(sys.stdin.read()[:-1])]))"