sed(streaming editor) †以下で紹介するものはファイルの置換方法。 また、複数のファイルの文字列を置換することも可能。 文字列の入っているファイル †# cat test iii aaa ddd lll #1234 1234 #kkk aaabbbcccddd o#o#o# trusted_networks 127.0.0.1/32 192.168.0.0/24 172.16.0.0/16 先に書式・オプションの説明。 -e:文字列を置換し、標準出力させる(実際に処理を行う前の確認をしたい時などに) -i:標準出力させずに直接ファイルを編集する(複数ファイルの置換などに) 例1) # sed -e "s/aaa/bbb/g test 例2) # sed -i "s/aaa/bbb/g test 例3) # sed -e "s/aaa/bbb/g test > test1 以下、紹介しているものは-eオプションが多いので、ファイルにリダイレクトさせたり、
単純置換 †aaaをbbbに置換 # sed -e "s/aaa/bbb/g" test iii bbb ddd lll #1234 1234 #kkk bbbbbbcccddd o#o#o# trusted_networks 127.0.0.1/32 192.168.0.0/24 172.16.0.0/16 削除(無に置換) †bbbを削除 # sed -e "s/bbb//g" test iii aaa ddd lll #1234 1234 #kkk aaacccddd o#o#o# trusted_networks 127.0.0.1/32 192.168.0.0/24 172.16.0.0/16 行の削除 †aaaが含まれる行の削除 # sed '/aaa/d' test iii ddd lll #1234 1234 #kkk o#o#o# trusted_networks 127.0.0.1/32 192.168.0.0/24 172.16.0.0/16 行頭の#を削除 †#から始まる行の#を削除する。 # sed -e "s/^#//g" test iii aaa ddd lll 1234 1234 aaabbbcccddd kkk o#o#o# trusted_networks 127.0.0.1/32 192.168.0.0/24 172.16.0.0/16 特定の文字列から始まる行の末尾に文字列を追加する †o#o#o#から始まる行の末尾に「111.222.123.0/24」と「110.119.117.177/32」 # sed "s/^\(o#o#o#.*\)/\1 111.222.123.0\/24 110.119.117.177\/32/" test iii aaa ddd lll #1234 1234 aaabbbcccddd #kkk o#o#o# 111.222.123.0/24 110.119.117.177/32 trusted_networks 127.0.0.1/32 192.168.0.0/24 172.16.0.0/16 特定の文字列から始まる行の行頭に文字列を追加する †# sed "s/^\(^trust\)/# \1/g" test iii aaa ddd lll #1234 1234 aaabbbcccddd #kkk o#o#o# # trusted_networks 127.0.0.1/32 192.168.0.0/24 172.16.0.0/16 文頭に文字列を追加 †$ sed -e "s/^/aaa/" test aaatest 複数ファイルを一斉に置換する †スクリプトが10個存在するとし、 # cat a1.sh #/bin/bash echo "test a" cp -p /usr/local/www/a.html /var/www/html/a.html これを全ファイル置換する。 echo "test a"~ 置換後 echo "`hostname`"~ # sed -i 's/test a/`hostname`/g' *.sh # cat a1.sh #!/bin/bash echo "`hostname`" cp -p /usr/local/www/a.html /var/www/html/a.html 上記の様に"test a"の置換が完了。 次に、 /usr/local/www/a.html 置換後 /var/www/html.bak/a.html # sed -i 's/usr\/local\/www/var\/www\/html.bak/g' *.sh #!/bin/bash echo "`hostname`" cp -p /var/www/html.bak/a.html /var/www/html/a.html スラッシュはエスケープする必要があるので、\を入れること。 特定の文字列行を置換する †目的 置換前 # grep ^myhostname main.cf 実行 # sed -i "s/^myhostname.*/myhostname\ \=\ \hogehoge.com/g" main.cf 置換後 補足 |