ある改行を含んだ文章があって、その文章から改行をまたいで文字列を切り取りたい時があったりします。ファイルを1行ずつ読み込んで文字数をカウントして、、と悩んでいましたが、そんなシェルスクリプトを書かなくてもLinuxコマンドのcutをうまく利用すれば簡単にできたりします。
cutは1行毎を対象にして切り取ります。1行の終わりは改行コードなので、この改行コードを空行などに置換→cut→空行を改行コードに戻す、の手順で改行を無視して文章を切り取ることができます。
例えば、下記のようなファイル(sample.txt)があって、
abc def ghi
下記のように切り出したいとします。
abc de
単純な文字数指定のcutでは全部切り出してしまいます。
$ cut -c1-6 sample.txt
abc
def
ghi
まずは改行をスペースに置換します。
$ tr '\n' ' ' < sample.txt abc def ghi
そして文字数指定でcutします。
$ tr '\n' ' ' < sample.txt | cut -c1-6 abc de
空白を改行コードに戻します。
$ tr '\n' ' ' < sample.txt | cut -c1-6 | sed -e 's/ /\n/g' abc de
できた!
文章に空白が含まれているのであれば、文章に含まれていない文字(@とか)で置換してcutします。
$ tr '\n' '@' < sample.txt | cut -c1-6 | sed -e 's/@/\n/g'