sedでファイルの前から○行とか、後ろから○行に対してのみ処理を行わせる

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
Sponsored Links

後ろから

後ろから数行の場合だと、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

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*