aoma blog

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

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

この記事は移転しました。約5秒後に新記事へ移動します。
移動しない場合はココをクリックして新サイトをお楽しみください。

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

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