th0x0472.log

アクセスカウンタ

zoom RSS Linuxコンソール上でアルファベット順にn文字ずらした文字列を得る(シーザー暗号)

<<   作成日時 : 2016/06/26 16:23   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

俺的備忘録さんに「Linuxコンソール上でアルファベット順にn文字ずらした文字列を得る(シーザー暗号)」というエントリがあったので、私もやってみました。

完全に便乗です。
最初、俺的備忘録さんのやり方が分からず、でも動くぞ!、どうなってるんだろ〜!?というところから大分脇道にそれた結果でもあります。


私はこうやりました。

下準備です、長いです。
大文字AからZまでが入った変数を作ります。


$ A=$(echo {A..Z})
$ echo $A
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z


スペースが邪魔なので削ります。


$ A=${A// /}
$ echo $A
ABCDEFGHIJKLMNOPQRSTUVWXYZ


小文字版も作ります。


$ a=${A,,}
$ echo $a
abcdefghijklmnopqrstuvwxyz


ずらす文字数も変数に入れます。


$ S=13


ようやく準備完了したので、やってみます。


$ echo FOO bar | tr "$A$a" "${A:$S}${A:0:$S}${a:$S}${a:0:$S}"
SBB one


ずらすのが13文字であれば、nkfでもできます。本当に、nkfは偉大です。


$ echo FOO bar | nkf -r
SBB one


以下、解説するほどのものではないかもしれませんが、一応。

大文字A-Zまでの文字列を作る前半、 {A..Z} は、bashの機能で A B C...Z と展開してくれるのを使ってます。
よく for N in {1..10} とかでつかうアレです。

いきなり A={A..Z} としても、代入前に展開されないようで、 {A..Z} という文字列がAに代入されてしまうので、echo した結果を代入してます。

また、 {A..z} とすると、Z と a の間に期待しない文字が何文字が何個か入りました。


$ echo {A..z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z


これはこれで面白そうですが、今回やりたいこととは違うので、二つに分けました。

スペースを削るのと小文字版を作るのもbashの機能で、変数の中身を加工して展開してくれるのを使ってます。

${A// /} で文字列 $A 中のスペース全てを '' に置き換えてます。
sed 's/ //g' と同じだと思います。考え方は違いますが tr -d ' ' でも結果は一緒かと。

それなら最初からこうすれば良いじゃんというツッコミは勘弁してください。


$ A=$(echo {A..Z} | tr -d ' ')
$ echo $A
ABCDEFGHIJKLMNOPQRSTUVWXYZ


${A,,} で文字列 $A 中の大文字を全て小文字に置き換えてくれます。
tr 'A-Z' 'a-z' と同じだと思います。

n 文字ずらした、変換後の文字列を作るのも、bashの機能で、文字列の一部分を取り出してくれるのを使ってます。
ごちゃごちゃ説明するより、見てもらった方が早いかと。


$ echo ${A:13} ${A:0:13} ${a:13} ${a:0:13}
NOPQRSTUVWXYZ ABCDEFGHIJKLM nopqrstuvwxyz abcdefghijklm


awk の substr() なんかと考えは一緒ですが、文字を数えるのが0始まりだったり1始まりだったり、覚えられません。


$ echo $A $a | awk '{print substr($1,14),substr($1,0,13),substr($2,14),substr($2,0,13)}'
NOPQRSTUVWXYZ ABCDEFGHIJKLM nopqrstuvwxyz abcdefghijklm


今回使った機能+アルファ色々が、man bash の Parameter Expansion のセクションで説明されてます。
今回使った機能は以下のアタリです。ご参考まで。


${parameter/pattern/string}

${parameter:offset:length}

${parameter^pattern}
${parameter^^pattern}

${parameter,pattern}
${parameter,,pattern}



ソフトウェアデザイン 2016年 06 月号 [雑誌]
技術評論社
2016-05-18

amazon.co.jpで買う
Amazonアソシエイト by ソフトウェアデザイン 2016年 06 月号 [雑誌] の詳しい情報を見る / ウェブリブログ商品ポータル



シェルプログラミング実用テクニック (Software Design plus)
技術評論社
上田 隆一

amazon.co.jpで買う
Amazonアソシエイト by シェルプログラミング実用テクニック (Software Design plus) の詳しい情報を見る / ウェブリブログ商品ポータル


テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Linuxコンソール上でアルファベット順にn文字ずらした文字列を得る(シーザー暗号) th0x0472.log/BIGLOBEウェブリブログ
文字サイズ:       閉じる