ちょっとした処理のために、bashでファイルから改行を含むn文字~x文字分の範囲を抽出したいなぁと思い、最初はreadで実現しようと思ったのだが、どうも改行を含む文字数となるとうまくいかなかった。 で、tailとheadでとりあえず実現したので、念のため備忘として残しておく。 なお、この際改行も文字数として含まれるので注意すること。

cat file | tail -c +$((開始文字数 + 1)) | head -c $((終了文字数 + 1))

[root@BS-PUB-CENT7-01 ~]# cat test3.txt
123
456
789
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ
[root@BS-PUB-CENT7-01 ~]# cat test3.txt | tail -c +$((4 +1))
456
789
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ
[root@BS-PUB-CENT7-01 ~]# cat test3.txt | tail -c +$((4 +1)) | head -c $((7+1))
456
789