sedコマンド(文字列置換)の使い方

文字列置換で利用するsedコマンドの使い方を解説します。sedコマンドを活用すると「文字列の置換」以外に「文字列の挿入、削除」もできます。

書式

sed [オプション] スクリプトコマンド 入力ファイル

利用例

最初にマッチしたものを置換

test.txtファイル の各行で、 aaa最初にマッチした箇所AAA に置換します。

$ cat test.txt 
111aaa222aaa
aaa222ccc444
ddd333aaa555
$
$ sed s/aaa/AAA/ test.txt
111AAA222aaa
AAA222ccc444
ddd333AAA555

全て置換

test.txtファイル の各行で、 aaaにマッチする全ての箇所AAA に置換します。

$ cat test.txt 
111aaa222aaa
aaa222ccc444
ddd333aaa555
$
$ sed s/aaa/AAA/g test.txt
111AAA222AAA
AAA222ccc444
ddd333AAA555

置換して上書き

-iオプション を利用すると置換結果で上書きできます。

$ cat test.txt 
111aaa222aaa
aaa222ccc444
ddd333aaa555
$
$ sed -i s/aaa/AAA/ test.txt
111AAA222aaa
AAA222ccc444
ddd333AAA555
$
$ cat test.txt 
111AAA222aaa
AAA222ccc444
ddd333AAA555

指定行を削除

3〜5行目を削除します。

$ cat test.txt 
1111
2222
3333
4444
5555
6666
7777
$
$ sed '3,5d' test.txt 
1111
2222
6666
7777

空行削除

$ cat test.txt 
1111
2222

3333
4444
5555


6666
7777
$
$ sed '/^$/d' test.txt 
1111
2222
3333
4444
5555
6666
7777

指定行の前後にテキスト挿入

  • i
    • 指定位置の前に挿入できます。
  • a
    • 指定位置の後ろに挿入できます。
$ cat test.txt 
1111
2222
3333
4444
5555
6666
7777
$
$ sed '3i aaaaaaaaa' test.txt 
1111
2222
aaaaaaaaa
3333
4444
5555
6666
7777
$
$ sed '3a aaaaaaaaa\nbbbbbbbbb' test.txt 
1111
2222
3333
aaaaaaaaa
bbbbbbbbb
4444
5555
6666
7777

指定キーワードの前後にテキスト挿入

$ cat test.txt 
1111
2222
3333
4444
5555
6666
7777
$ sed '/4444/i aaaaaaaaa' test.txt 
1111
2222
3333
aaaaaaaaa
4444
5555
6666
7777
$ sed '/4444/a aaaaaaaaa' test.txt 
1111
2222
3333
4444
aaaaaaaaa
5555
6666
7777

設定ファイルの設定値変更

sedを活用すると、設定値の変更処理もスクリプトに記述できます。

$ sed -i 's/^post_max_size.*/post_max_size = 100M/' /etc/php.ini
$
$ grep post_max_size /etc/php.ini
post_max_size = 100M
わくわくBank.
フリーランスのエンジニアとして活動してます。ここでは、ソフトウェア開発で必要とされる技術、用語、概念を整理しています。