コンソール上で文字列を1文字ずつ入れ替えて出力をさせる
Pocket

ふと、sedで文字列を1文字ずつ入れ替えた一覧(「ちんすこう」が「ちんこすう」になってるなど)を作りたいと思ったので、やってみることにした。
まぁ、そんなに難しいことはなく、以下のようにコマンドを実行すればできる。

echo あいうえお | (a=$(cat);seq 0 $((${#a}-1))|xargs -n1 -I@ bash -c "echo $a|sed -r 's/(.{@})(.)(.)//'")
Sponsored Links

blacknon@BS-PUB-UBUNTU-01:~$ echo あいうえお | (a=$(cat);seq 0 $((${#a}-1))|xargs -n1 -I@ bash -c "echo $a|sed -r 's/(.{@})(.)(.)//'")
いあうえお
あういえお
あいえうお
あいうおえ
あいうえお

 

地味にちょっと引っかかりやすいのが、sedでの正規表現のあたりだろうか。
“(.)(.)”だけで正規表現をかけると2文字ずつ認識されてしまうので、xargsで1文字ずつずらして処理するようにしている。
多分、sedのラベルを使えばもっとシンプルに書ける気がするけど、ひとまずこれで動くからよしとするか(´・ω・`)。

 

Pocket

Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

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

*