sedコマンドで任意の文字列を置換 coneta #3


sedコマンドによる文字列の置換

 通常は区切り文字に/を使用します。

sed 's/被置換文字列/置換文字列/g'

 /を含む文字列を置換するときは、区切り文字に/は使えません。
 面倒ですが、/を含む文字列の/\でエスケープすれば置換することができます。
 以下はa/bA/Bに置換する例です。

sed 's/a\/b/A\/B/g'

/を含む文字列の置換

 \でエスケープせずに/を含む文字列を置換する場合、区切り文字に/以外の文字を使用します。

sed 's@被置換文字列@置換文字列@g'

 この例では@が区切り文字です。
 他の文字を使うこともできますが、いずれにしても、
区切り文字を含まない文字列しか置換できません。

任意の文字列の置換

 制御文字を通常の文字列に使用することは、ほとんどありません。
 区切り文字に制御文字を使用することで、事実上任意の文字列を置換することができます。
 以下は、区切り文字に制御文字^Dを使用した例です。

sed 's^D被置換文字列^D置換文字列^Dg'

 他の制御文字を使うこともできます、EOTを使っているのは単なる個人的な習慣です。
 制御文字の入力方法は以下を参考にしてください。
【参考】
  viコマンドで制御文字を入力 coneta #2

制御文字列を直接使わない

 制御文字を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