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