###sedコマンドによる文字列の置換
通常は区切り文字に/
を使用します。
sed 's/被置換文字列/置換文字列/g'
/
を含む文字列を置換するときは、区切り文字に/
は使えません。
面倒ですが、/
を含む文字列の/
を\
でエスケープすれば置換することができます。
以下はa/b
をA/B
に置換する例です。
sed 's/a\/b/A\/B/g'
###/を含む文字列の置換
\
でエスケープせずに/
を含む文字列を置換する場合、区切り文字に/
以外の文字を使用します。
sed 's@被置換文字列@置換文字列@g'
この例では@
が区切り文字です。
他の文字を使うこともできますが、いずれにしても、
区切り文字を含まない文字列しか置換できません。
###任意の文字列の置換
制御文字を通常の文字列に使用することは、ほとんどありません。
区切り文字に制御文字を使用することで、事実上任意の文字列を置換することができます。
以下は、区切り文字に制御文字^D
を使用した例です。
sed 's^D被置換文字列^D置換文字列^Dg'
他の制御文字を使うこともできます、EOTを使っているのは単なる個人的な習慣です。
制御文字の入力方法は以下を参考にしてください。
【参考】
[viコマンドで制御文字を入力 coneta #2]
(https://qiita.com/EjiriAkira/items/4c8c2deba8b5d283e323)
###制御文字列を直接使わない
制御文字をsh変数に格納、参照することにより、間接的に制御文字を使用する方法です。
delimiter=$(echo -n -e '\x04') sed 's'${delimiter}'被置換文字列'${delimiter}'置換文字列'${delimiter}'g'
###環境
ホスト Windows10 COREi7
VM VirtualBox バージョン 5.2.8 r121009 (Qt5.6.2)
CentOS Linux release 7.4.1708 (Core)
3.10.0-693.21.1.el7.x86_64 #1 SMP Wed Mar 7 19:03:37 UTC 2018
GNU bash, バージョン 4.2.46(2)-release (x86_64-redhat-linux-gnu)
sed (GNU sed) 4.2.2