📝

Bash Shell (sed commandの使い方)

2023/09/03に公開

Sedとは

「stream editor」の略称で、指定したファイルをコマンドに従って処理することが出来る。
入力を行単位で読み取り、テキスト変換などの編集をおこない行単位で出力する。
正規表現に対応している。

Sed = Stream editor.

テキスト置換を行うためのコマンド

manコマンドでレファレンスマニュアルを参照する
man sed

基本的な使い方

assisstan > assistant に変換
echo 'Dwight is the assinstan regional manager..' > manager.txt

❯ sed 's/assinstan/assistant/' manager.txt
Dwight is the assistant regional manager.

応用編

合致するものを全て置換する

合致するものを全て置換する
❯ echo 'This is line1' > sample.txt
❯ echo 'This is line2' >> sample.txt
❯ cat sample.txt
This is line2.
This is line2

❯ sed 's/This/That/g' sample.txt
That is line1.
That is line2.

2つ目に合致するものを置換する

2つ目に合致するものを置換する
❯ sed 's/This/That/2' sample.txt
This is line1.
This is line2.
This is a pen, that is pencil

キーワードに合致する行のものを置換する

用意
❯ echo '#User to run service as.' > config
echo 'User apache' >> config
echo >> config
echo '#Group to run service as.' >> config
echo 'Group apache' >> config

❯ cat config
#User to run service as.
User apache

#Group to run service as.
Group apache
キーワードに合致する行のものを置換する
❯ sed '/Group/ s/apache/httpd/' config
#User to run service as.
User apache

#Group to run service as.
Group httpd

.bakに変更内容を保存する

.bakに変更内容を保存する
❯ sed -i.bak 's/this/that/' sample.txt
❯ cat sample.txt
This is line1.
This is line2.
This is a pen, that is pencil
❯ sed -i.bak 's/This/That/g' sample.txt
❯ cat sample.txt
That is line1.
That is line2.
That is a pen, that is pencil

エスケープを使った置換

エスケープを使った置換
❯ echo '/home/jason'
/home/jason
❯ echo '/home/jason' | sed 's/\/home\/jason/\export\/users\/jasonc/'
export/users/jasonc

正規表現を使った置換

用意
❯ echo '#User to run service as.' > config
echo 'User apache' >> config
echo >> config
echo '#Group to run service as.' >> config
echo 'Group apache' >> config

❯ cat config
#User to run service as.
User apache

#Group to run service as.
Group apache
正規表現を使ってコメントの行を削除
❯ sed '/^#/d' config
User apache

Group apache
正規表現を使って空白行の削除
❯ sed '/^$/d' config
#User to run service as.
User apache
#Group to run service as.
Group apache
上記2つの処理を繋げて書き、さらに置換を行う
❯ sed '/^$/d ; /^#/d ; s/apache/httpd/' config
User httpd
Group httpd

#Userを探し、その行の特定のキーワードを書き換える。(※空行が見つかるまで)
❯ sed '/#User/,/^$/ s/run/execute/' config
#User to execute service as.
User apache

#Group to run service as.
Group apache

Discussion