sedで、例えばファイルの頭から数えて○行、後ろから数えて○行に対して処理を行わせる、といった場合、以下のようにする。
前から
前から数行を指定するのは簡単で、以下のようにすればよい。
sed '1,n 処理内容'
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test5.txt 1 aaaaa123 2 bbbbb123 3 ccccc123 4 ddddd123 5 eeeee123 6 fffff123 7 ggggg123 8 hhhhh123 9 iiiii123 10 jjjjj123 11 kkkkk123 12 lllll123 13 mmmmm123 blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test5.txt | sed '1,3 s/123/999/g' 1 aaaaa999 2 bbbbb999 3 ccccc999 4 ddddd123 5 eeeee123 6 fffff123 7 ggggg123 8 hhhhh123 9 iiiii123 10 jjjjj123 11 kkkkk123 12 lllll123 13 mmmmm123 blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test5.txt | sed -n '1,3 p' 1 aaaaa123 2 bbbbb123 3 ccccc123
後ろから
後ろから数行の場合だと、sed単体でやるにはちょっと難しそう。
なので、tacを間に挟むことで行の順番を反転させる。
tac | sed '1,n 処理内容' | tac
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test5.txt 1 aaaaa123 2 bbbbb123 3 ccccc123 4 ddddd123 5 eeeee123 6 fffff123 7 ggggg123 8 hhhhh123 9 iiiii123 10 jjjjj123 11 kkkkk123 12 lllll123 13 mmmmm123 blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test5.txt | tac | sed '1,3 s/123/999/g' | tac 1 aaaaa123 2 bbbbb123 3 ccccc123 4 ddddd123 5 eeeee123 6 fffff123 7 ggggg123 8 hhhhh123 9 iiiii123 10 jjjjj123 11 kkkkk999 12 lllll999 13 mmmmm999 blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test5.txt | tac | sed -n '1,3 p' | tac 11 kkkkk123 12 lllll123 13 mmmmm123