2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

###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]
(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


2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?