先日出席したシェル芸勉強会で、連続した文字列を特定の長さ(バイト数・文字数などなどの固定長)で改行して出力させるような問題があり、それの解法について覚えておきたいのがあったので備忘。
基本的にはfoldコマンドで行うのだが、地味にgrepコマンドでも同様の処理ができる。
1.foldコマンド
foldコマンドは、指定した文字数もしくはバイト数で文字列を折りたたむコマンド。
まさにこの処理のためにあるようなコマンドで、以下のようにコマンドを実行することで、半角文字列を指定した列数(バイト数)で改行させることができる。
(全角文字列の場合は、バイト数で計算される様子。)
fold -列数
fold -bバイト数
blacknon@X201:~$ cat /tmp/test
aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee
blacknon@X201:~$
blacknon@X201:~$ cat /tmp/test | fold -10
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
eeeeeeeeee
2.grepコマンド
grepコマンドでも同様の処理を行う事が出来る。
(こちらは全角でも文字数通りに動作するが、行によっては後半が出力されない事があるので注意。)
grep -oE .{文字数}
blacknon@X201:~$ cat /tmp/test
aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee
blacknon@X201:~$ cat /tmp/test | grep -Eo .{10}
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
eeeeeeeeee