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

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
Pocket

Written by blacknon

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

Leave a Comment

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