設定ファイルやスクリプトのソースなどでは、ダブルクォーテーションやシングルクォーテーションで値が囲まれている事が多い。
クォーテーションで囲まれている値のみを置換する場合は、以下のように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でダブルクォーテーション・シングルクォーテーションを扱った処理については、こちらに記述している。
- sedでダブルクォーテーション・シングルクォーテーションの置換・削除を行う
- sedやgrepなどを使ってLinux/UNIXでダブルクォーテーション・シングルクォーテーションに囲まれた文字列を抽出する