sed コマンド 行指定の置換・削除(アドレッシング)

バイオインフォ道場、くまぞうです。

sedコマンドの処理は行単位です。何も指定しなければすべての行が対象になりますが、アドレシングを指定することで特定の行だけに作用させることができます。

スポンサーリンク



sed コマンド 行指定の方法

置換sや削除dコマンドの前に、開始行番号,終了行番号を書くと対応した範囲にだけコマンドを適用することができます。開始や終了は、省略することもできます。行番号の代わりに、パターン(/pattern/s/...)を指定するとパターンに合致した行だけに、コマンドを適用することができます。また、置換した行だけ表示させる場合は、パターンスペースを自動表示を抑制する-nオプションと表示に関するpフラグを組み合わせると良いです。

関連記事 sed コマンド 置換・削除・アドレッシングまとめ

hello.sh(サンプルデータ)

#! /bin/bash

for i in `seq 1 ${1}`; do
    echo "${i} hello! 123"
done
$ chmod +x hello.sh
$ ./hello.sh 3
1 hello! 123
2 hello! 123
3 hello! 123

行指定の置換

$ sh hello.sh 3 | sed '1,3s/hello/HELLO/'      # 1〜3行目
1 HELLO! 123
2 HELLO! 123
3 HELLO! 123

$ sh hello.sh 3 | sed '/^[13]/s/hello/HELLO/'  # 先頭が「1 or 3」の行
1 HELLO! 123
2 hello! 123
3 HELLO! 123

$ sh hello.sh 3 | sed -n '2s/hello/HELLO/p'    # 置換した行だけ表示
2 HELLO! 123

パターンで表現するには、否定の方法も知っておくと良いでしょう。否定は、置換コマンドsや削除コマンドdの前に、!を指定します。例えば、アドレシングを用いた場合に範囲を指定するのは容易ですが、飛び飛びで指定する場合は面倒です。除外したいパターンが明確な場合に、役に立つかもしれません。

指定行の除外

$ sh hello.sh 3 | sed -n '2!s/hello/HELLO/p'         # 2行目以外(否定)
1 HELLO! 123
3 HELLO! 123

$ sh hello.sh 5 | sed -n '/^[24]/!s/hello/HELLO/p'   # 先頭「2 or 4」以外(否定)
1 HELLO! 123
3 HELLO! 123
5 HELLO! 123
スポンサーリンク



One thought to “sed コマンド 行指定の置換・削除(アドレッシング)”

コメントは受け付けていません。