タブとスペースを変換するのにsedを使う事があるのだが、ソースコードのインデントなんかだと幅がズレてしまったりしてあまり良くな買ったりする。
で、そういうときはexpand
コマンドを使うと楽なので、一応使い方について残しておくことにする。
1. タブ→スペース変換
タブ→スペースに変換する場合は、expandコマンドを利用する。
blacknon@BS-PUB-UBUNTU-01:~$ # タブ付きで出力
blacknon@BS-PUB-UBUNTU-01:~$ echo -e "\taaa\nxxx\tbbb"
aaa
xxx bbb
blacknon@BS-PUB-UBUNTU-01:~$ # cat -Aで見ると、タブ(^I)があるのが見える
blacknon@BS-PUB-UBUNTU-01:~$ echo -e "\taaa\nxxx\tbbb"|cat -A
^Iaaa$
xxx^Ibbb$
blacknon@BS-PUB-UBUNTU-01:~$ # expandでタブをスペースに変換する
blacknon@BS-PUB-UBUNTU-01:~$ echo -e "\taaa\nxxx\tbbb"|expand
aaa
xxx bbb
blacknon@BS-PUB-UBUNTU-01:~$ # cat -Aで見ると、タブがなくスペースに変換されていることがわかる
blacknon@BS-PUB-UBUNTU-01:~$ echo -e "\taaa\nxxx\tbbb"|expand|cat -A
aaa$
xxx bbb$
なお、デフォルトではタブの文字数は8文字となっているため、もし違う文字数にしたい場合は-tオプションで変更するといいだろう。
-i
オプションを付与すると、空白以外の文字の後ろにあるタブは対象外にしてくれる。
2. スペース→タブ変換
スペース→タブに変換する場合は、unexpand
コマンドを利用する。
blacknon@BS-PUB-UBUNTU-01:~$ # スペース付きで出力
blacknon@BS-PUB-UBUNTU-01:~$ echo -e " aaa\nxxx bbb"
aaa
xxx bbb
blacknon@BS-PUB-UBUNTU-01:~$ # タブに変換
blacknon@BS-PUB-UBUNTU-01:~$ echo -e " aaa\nxxx bbb"|unexpand
aaa
xxx bbb
blacknon@BS-PUB-UBUNTU-01:~$ # cat -Aでみると、ちゃんとタブに変換されているのがわかる
blacknon@BS-PUB-UBUNTU-01:~$ echo -e " aaa\nxxx bbb"|unexpand |cat -A
^Iaaa$
xxx bbb$
まぁ、特定の行とか範囲だけを指定してやる場合になると、sedやらawkで処理中に呼び出して置換をすることになるかなと思うけど、そんな処理あまりやることは無いだろう。 多分。