[Unix] xargsで複数コマンドを実行させてシーザー暗号を解く

暗号技術入門 を読み始めたのですが、その中にシーザー暗号が出てきました。 ターミナルで解けないかなと思って調べたら [このページ](https://orebibou.com/2016/06/linuxコンソール上でアルファベット順にn文字ずらし/) にたどり着きました。 trコマンドを使うとできるようです。 ```bash `gutter:false; $ echo "krjhkrjh" | tr "$(printf %23sa-z)" a-za-z hogehoge ``` うーん tr コマンドを使って置き換えているようだけどよくわからない... trコマンドの説明抜粋 ``` `gutter:false; NAME tr -- translate characters SYNOPSIS tr [-Ccsu] string1 string2 tr [-Ccu] -d string1 tr [-Ccu] -s string1 tr [-Ccu] -ds string1 string2 ``` string1をstring2に置き換えてくれますが、string1の先頭にスペースがあると置き換えられるstring2の文字列がずれます。 なるほど、記事を書いていてやっと理解できました。 printfを使うと、%フォーマットが使えるので、何文字ずらすが簡単にできます。 これを使って、シーザー暗号を特には1から25までずらして行って、意味の通るものが正解です。 先ほどの例を解く場合はxargsコマンドを使って、printfの数値を変化させれば良いです。 xargsを使って、複数コマンドを実行させるには、 sh -c としてコマンドを実行させます。 ```bash `gutter:false; highlight:24; $ seq 1 25 | xargs -n 1 -I@ sh -c 'echo "krjhkrjh" | tr "$(printf %@sa-z)" a-za-z' lskilski mtljmtlj numknumk ovnlovnl pwompwom qxpnqxpn ryqoryqo szrpszrp tasqtasq ubtrubtr vcusvcus wdvtwdvt xewuxewu yfxvyfxv zgywzgyw ahzxahzx biaybiay cjbzcjbz dkcadkca eldbeldb fmecfmec gnfdgnfd hogehoge iphfiphf jqigjqig ``` hogehogeが見つかりました。

0 件のコメント :

コメントを投稿