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