sedコマンドでシングルコーテーションやダブルコーテーションを含む文字列を置換する
シングルコーテーションやダブルコーテーション内の文字列だけ置換したいときありますよね。
sedコマンドで"aaa"
を"bbb"
に置換したい!囲まれてないaaa
は置換したくない!みたいな。
その場合はシングルコーテーションやダブルコーテーションで囲ってやる必要があります。
何を言っているのかわからねーと思うから例を示すぜ!
"aaa"
を"bbb"
に置換したい
こんなファイルがあったとする
$ cat a.txt "aaa" 'aaa' aaa
単純にaaa
をsedコマンドで置換しようとするとこんな感じ。
$ sed s/aaa/bbb/ a.txt "bbb" 'bbb' bbb
置換対象にダブルコーテーションを指定してみる。
$ sed s/"aaa"/bbb/ a.txt "bbb" 'bbb' bbb
意味なし。。。
シングルコーテーションはどうか?
$ sed s/'aaa'/bbb/ a.txt "bbb" 'bbb' bbb
意味なし。。。
ところでオプションはシングルコーテーションやダブルコーテーションで囲むことができます。
こんな感じ。
$ sed 's/aaa/bbb/' a.txt "bbb" 'bbb' bbb
この状態でダブルコーテーションを指定してみる。
$ sed 's/"aaa"/bbb/' a.txt bbb 'aaa' aaa
おお!対象が絞れた!
シングルコーテーションはどうか?
$ sed "s/'aaa'/bbb/" a.txt "aaa" bbb aaa
こちらもイケた!
ということで置換後の文字列にもコーテーションを付与してあげて一件落着。
$ sed 's/"aaa"/"bbb"/' a.txt "bbb" 'aaa' aaa $ sed "s/'aaa'/'bbb'/" a.txt "aaa" 'bbb' aaa
ファイルを上書きしたい場合はiオプションを付与すればOK!
sed -i 's/"aaa"/"bbb"/' a.txt