Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【シェルコマンド】trコマンドはsedよりお手軽に置換できる(ただし1文字置換に限る)

自分はコマンドで置換を最初にやろうと思ったときに、sedを教えてもらった
色々と便利なんだけど、覚えることがかなりあるので使うときは毎回調べないといけない・・・

 

そんなときに見つけたのがtrというコマンド
使い方は至ってシンプル

tr "hoge" "foo" < foo.txt

hoge.txtの中身のうち、hogeをfooに置換してくれる

 

例えばhoge.txtが次のようなデータだったとする

[1,2,3,4,5]

 

これを

1
2
3
4
5

のように整形したいときは、

 

tr ',' '\n' < hoge.txt | tr ']' '\n' | tr -d '[' >mod_hoge.txt
もしくは
tr ',' '\n' < hoge.txt | tr -d ']' | tr -d '[' > mod_hoge.txt

でおk(なはず)
最後に改行を入れたいかどうかでちょっと違うだけ

 


最初に説明した tr "hoge" "foo" < hoge.txt 以外にも-dオプションを使っている

tr -d "[" < hoge.txt

で、[という文字を削除できる。

 

 

trのデメリットは1文字での置換しかできない点。

 

例えば

tr '123' '456' < hoge.txt

と先ほどのデータに対して、置換をしてみると
[4,5,6,4,5]が返ってくるはず。
つまり1を4に、2を5に、3を6にそれぞれ1文字置換してくれている。
複数文字に及ぶ文字列を置換するためにはsedを使うべし。