📝
Bash Shell (sed commandの使い方)
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