ちょっと前にsedとブレース展開を使ってLeet変換した文字列の一覧を羅列するという処理についてやってたのだが、ふと特定の文字列がLeet変換されている文字列をgrepする場合どうすれば良いのかなと思い調べてみたので、備忘として残しておく。

grepには-fオプション(指定されたファイルの中にある文字列からgrepする)があるので、特に難しいこともなくプロセス置換で実現できる。Leetの組合せは状況に応じて足していけばいい。

grep -i -f <(eval echo $(echo 文字列 | sed -e 's/a/{a,@}/g' -e 's/s/{s,\\\$}/g' -e 's/o/{o,0}/g') | tr ' ' '\n') /tmp/test.txt

blacknon@BS-PUB-DEVELOP:~$ head /tmp/test.txt
password
passwd
P@ssw0rd
10000
10001
10002
10003
10004
10005
10006
blacknon@BS-PUB-DEVELOP:~$ grep -i -f <(eval echo $(echo password | sed -e 's/a/{a,@}/g' -e 's/s/{s,\\\$}/g' -e 's/o/{o,0}/g') | tr ' ' '\n') /tmp/test.txt
password
P@ssw0rd
P@s$w0rd