aoma blog

エンジニアの日常とか技術とか

sedコマンドでシングルコーテーションやダブルコーテーションを含む文字列を置換する

シングルコーテーションやダブルコーテーション内の文字列だけ置換したいときありますよね。

sedコマンドで"aaa""bbb"に置換したい!囲まれてないaaaは置換したくない!みたいな。

その場合はシングルコーテーションやダブルコーテーションで囲ってやる必要があります。

何を言っているのかわからねーと思うから例を示すぜ!

"aaa""bbb"に置換したい

こんなファイルがあったとする

$ cat a.txt
"aaa"
'aaa'
aaa

単純にaaasedコマンドで置換しようとするとこんな感じ。

$ 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