たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

誕生日なので難読化シェル芸した

今日はお誕生日

今日は紲星あかりちゃんのお誕生日です!

www.ah-soft.com

ついでに私のお誕生日でもあります。というわけでお誕生日に関係する文字列から date コマンドを作っていきたいと思います

1

お誕生日おめでとう始動

$ : $(echo お誕生日おめでとう|base64|grep -oP "(?<=5)([a-z][a-z])"|sed 's/.$/&&/g'); man $_ | grep -m1 -oP "(?<=- )..|..(?=rd)"|sort|tr -d 
|bash
20191222日 日曜日 12:03:45 JST

こんなかんじ

$ echo お誕生日おめでとう|base64|grep -oP "(?<=5)([a-z][a-z])"|sed 's/.$/&&/g'
pee

「お誕生日おめでとう」という文字列に不思議なシェル芸をすると pee という文字列が得られます。

$ man pee | grep -m1 -oP "(?<=- )..|..(?=rd)"
te
da

pee のmanページからこんな感じの正規表現で引っ掛けてやるとなんと date の部品が得られます。というわけで改行と順番を入れ替えてやれば date が出来上がります。

$ man pee | grep -m1 -oP "(?<=- )..|..(?=rd)" | sort | tr -d \n
date

2

$ : xztaityozx; : ${_/??}; eval $(echo ?${_/${_/??}}?/???/|rev)
20191222日 日曜日 12:55:44 JST

私の名前から date を作ります。 ta を変数展開で取り出し、glob展開用の文字列を作ってから eval で評価します。

$ : xztaityozx; : ${_/??};
taityozx
$ : xztaityozx; : ${_/??}; echo ?${_/${_/??}}?/???/|rev
/???/?at?

3

$ echo 紲星あかり|sha256sum|grep -oP "(?<=f19).{6}"|sed 's/[0-9]../?/g;s@^@/???/@e'
20191222日 日曜日 13:24:08 JST

せっかくなのでハイパーキュートVOICEROIDな紲星あかりちゃんからも date を生成しました。とくに追加で説明するところと言えば sede を使っているところぐらいですかね

$ echo |sed 's/^/date/'
date
$ echo |sed 's/^/date/e'
20191222日 日曜日 13:25:55 JST

結局いつもやってることと同じじゃないか…

最近は正規表現をこねこねして date するのが楽しいです。任意の文字➡アルファベットや数値という処理で sha1sumbase64xxd に頼らないといけないので、ここを何とかする方法が見つかればいいなぁと思っています。