ふと、sedで文字列を1文字ずつ入れ替えた一覧(「ちんすこう
」が「ちんこすう
」になってるなど)を作りたいと思ったので、やってみることにした。
まぁ、そんなに難しいことはなく、以下のようにコマンドを実行すればできる。
echo あいうえお | (a=$(cat);seq 0 $((${#a}-1))|xargs -n1 -I@ bash -c "echo $a|sed -r 's/(.{@})(.)(.)/\1\3\2/'")
blacknon@BS-PUB-UBUNTU-01:~$ echo あいうえお | (a=$(cat);seq 0 $((${#a}-1))|xargs -n1 -I@ bash -c "echo $a|sed -r 's/(.{@})(.)(.)/\1\3\2/'")
いあうえお
あういえお
あいえうお
あいうおえ
あいうえお
地味にちょっと引っかかりやすいのが、sedでの正規表現のあたりだろうか。
(.)(.)
だけで正規表現をかけると2文字ずつ認識されてしまうので、xargsで1文字ずつずらして処理するようにしている。
多分、sedのラベルを使えばもっとシンプルに書ける気がするけど、ひとまずこれで動くからよしとするか(´・ω・`)。