sedでダブルクォーテーション・シングルクォーテーションで囲まれた文字を置換する

設定ファイルやスクリプトのソースなどでは、ダブルクォーテーションやシングルクォーテーションで値が囲まれている事が多い。
クォーテーションで囲まれている値のみを置換する場合は、以下のようにsedを実行すると良いだろう。

ダブルクォーテーションの場合

sed 's/"\([^"]*\)"/"置換後の値"/' 対象のファイルPATH
[root@test-centos7 work]# cat /work/test.txt
testline1="test1"
testline2="test2"

testline3='test3'
testline4='test4'
[root@test-centos7 work]# sed 's/"\([^"]*\)"/"replace"/' /work/test.txt
testline1="replace"
testline2="replace"

testline3='test3'
testline4='test4'

シングルクォーテーションの場合

sed 's/"\([^"]*\)"/"置換後の値"/' 対象のファイルPATH
[root@test-centos7 work]# cat /work/test.txt
testline1="test1"
testline2="test2"

testline3='test3'
testline4='test4'
[root@test-centos7 work]# sed "s/'\([^']*\)'/'replace'/" /work/test.txt
testline1="test1"
testline2="test2"

testline3='replace'
testline4='replace'

特定の行のみを置換対象とするのであれば、先頭にそれらの条件を付与すると良いだろう。
行指定条件の付与については、こちらを参照してもらいたい。

sed '/検索文字列/s/"\([^"]*\)"/"置換後の文字列"/' 置換するファイルPATH
[root@test-centos7 work]# cat /work/test.txt
testline1="test1"
testline2="test2"

testline3='test3'
testline4='test4'
[root@test-centos7 work]# sed '/testline2/s/"\([^"]*\)"/"replace"/' /work/test.txt
testline1="test1"
testline2="replace"

testline3='test3'
testline4='test4'


2016年04月13日 追記

似たような内容なのでここに追記する。鉤括弧([])で囲まれている文字列の置換の場合はこれ。

sed -e 's/\[\([^]]*\)\]/\[置換後の文字列\]/g' file.txt

2016年07月15日 追記

その他、sedでダブルクォーテーション・シングルクォーテーションを扱った処理については、こちらに記述している。