コンソール上で単語の文字組み合わせパターンすべてを取得する
Pocket

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

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
Sponsored Links

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])]))"

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*