Linux/UNIXで連続した文字列を特定の長さで改行分割する
Pocket

先日出席したシェル芸勉強会で、連続した文字列を特定の長さ(バイト数・文字数などなどの固定長)で改行して出力させるような問題があり、それの解法について覚えておきたいのがあったので備忘。
基本的にはfoldコマンドで行うのだが、地味にgrepコマンドでも同様の処理ができる。

1.foldコマンド

foldコマンドは、指定した文字数もしくはバイト数で文字列を折りたたむコマンド。
まさにこの処理のためにあるようなコマンドで、以下のようにコマンドを実行することで、半角文字列を指定した列数(バイト数)で改行させることができる。
(全角文字列の場合は、バイト数で計算される様子。)

fold -列数
fold -bバイト数

20160215_000000

blacknon@X201:~$ cat /tmp/test
aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee
blacknon@X201:~$
blacknon@X201:~$ cat /tmp/test | fold -10
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
eeeeeeeeee
Sponsored Links

2.grepコマンド

grepコマンドでも同様の処理を行う事が出来る。
(こちらは全角でも文字数通りに動作するが、行によっては後半が出力されない事があるので注意。)

grep -oE .{文字数}
blacknon@X201:~$ cat /tmp/test
aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee
blacknon@X201:~$ cat /tmp/test | grep -Eo .{10}
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
eeeeeeeeee

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。