Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

trコマンドで不要文字を抹殺したり小文字を大文字に置換したり。

YAMLデータをBashスクリプトのみでパースする - Bye Bye Mooreなどで扱ったtrコマンドについて理解が深まったのでメモ。

仮に、sampledata.logとして以下のようなテキストデータがあったとします。

$ cat sampledata.log 
data [alpha]
data [beta]
data [gamma]
data [delta]
data [epsillon]

不要な文字を取り除く

第一引数に要らない文字を(複数可)指定すればOKです。

$ tr -d '[]' < sampledata.log 
data alpha
data beta
data gamma
data delta
deta epsillon

文字を置換する

sedっぽいですが、これは一文字毎に置換します。
記号だけならこっちのほうが楽かもしれません

$ tr '[]' ',' < sampledata.log                                                                                                                                            
data ,alpha,
data ,beta,
data ,gamma,
data ,delta,
data ,epsillon,

文字列クラスを使って小文字を大文字に

文字列クラスでUNIXストリームエディタの可視性を上げる - Bye Bye Mooreで紹介したような文字列クラスの適用も可能です。

$ tr '[:lower:]' '[:upper:]'  < sampledata.log                                                                                                                            
DATA [ALPHA]
DATA [BETA]
DATA [GAMMA]
DATA [DELTA]
DATA [EPSILLON]

パスワードっぽく伏せ字にする

$ tr '[:lower:][:upper:]' '*' < sampledata.log                                                                                                                            
**** [*****]
**** [****]
**** [*****]
**** [*****]
**** [********]

伏せ字の代用にROT13暗号

面白い用法としては、ROT13方式に簡易暗号化する方法もあります。

$ tr '[:lower:][:upper:]' 'N-ZA-Mn-za-m]' < sampledata.log                                                                                                             
QNGN [NYCUN]
QNGN [ORGN]
QNGN [TNZZN]
QNGN [QRYGN]
QNGN [RCFVYYBA]

弱い暗号...というか隠語の類なので身内向けジョーク*1か、チラ見防止用が賢明でしょう

*1:そもそも元ネタ自体がそういう用途で用いられている