【逆引き】sedコマンドのいろいろな使い方

sedコマンドといえば置換をするコマンドというイメージが強いと思うのですが、その他にもいろいろなできることがあるのが分かったので逆引きでまとめます。

この記事の内容をマスターしたらファイルの書き換えの幅が大きく広がると思います!

置換

# sed 's/<置換対象文字列>/<置換後文字列>/'
$ cat << EOF | sed 's/cat/dog/'
cat
cat
bird
EOF

dog
dog
bird

パターンマッチング

(正規表現)という形式で置換対象を指定すると、\パターン番号と指定することでパターンにマッチした部分を置換後文字列に使用することができます!

# everyoneの部分だけを
$ echo 'Hello, everyone.' | sed 's/\(.*\)everyone./\1hirabay./'
Hello, hirabay.

これだと s/everyone/hirabay/と一緒ですけどね😇

行範囲を指定

置換する範囲を指定することも可能です。

▼行数で指定する場合

# sed 's/<置換対象文字列>/<置換後文字列>/'
$ cat << EOF | sed '2 s/cat/dog/'
cat
cat
cat
cat
EOF

cat
dog
cat
cat

▼範囲で指定する場合

# sed 's/<置換対象文字列>/<置換後文字列>/'
$ cat << EOF | sed '2,4 s/cat/dog/'
cat
cat
cat
cat
cat
EOF

cat
dog
dog
dog
cat

正規表現に一致する行番号を取得

-nオプションを使用します。

以下はcatを含む行数を取得する例です。

$ cat << EOF | sed -n '/cat/='
dog
cat
dog
this is a dog.
this is a cat.
EOF

2
5

行の追加

正規表現に一致した行に追加

一致した行に追加する例(iコマンドを使う)

$ cat << EOF | sed '/cat/i lion'
ant
cat
dog
EOF

ant
lion
cat
dog

一致した行の直後に追加する例(aコマンドを使う)

$ cat << EOF | sed '/cat/a lion'
ant
cat
dog
EOF

ant
cat
lion
dog

行指定して追加

$ cat << EOF | sed '2i lion'
ant
cat
dog
EOF

ant
lion
cat
dog

行の削除

正規表現に一致する行を削除

「cat」を含む行を削除する例です。

$ cat << EOF | sed '/cat/d'
dog
cat
this is a dog.
this is a cat.
EOF

dog
this is a dog.

行数指定で削除

行で指定する例

$ cat << EOF | sed '3d'
1
2
3
4
5
EOF

1
2
4
5

範囲で指定する例

$ cat << EOF | sed '2,4d'
1
2
3
4
5
EOF

1
5

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です