マイナー・マイナー

隠れた名作の発掘が生きがい。

【Shell】改行を無視して文章をcutする


スポンサードリンク

ある改行を含んだ文章があって、その文章から改行をまたいで文字列を切り取りたい時があったりします。ファイルを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'