ファイルの一重引用符を二重引用符に置き換える

ファイルの一重引用符を二重引用符に置き換える

/tmp/myfileに含まれるすべての一重引用符 'を'(二重引用符)に置き換える必要があります。

私はこれを使用しています

sed -i 's/'/\"/g' /tmp/myfile

そして他の組み合わせを試しましたが、うまくいく方法が見つかりませんでした。

助けてください。

答え1

変えるアポストロフィ')sedコマンドを入れるのが最も簡単です。ダブル置換時に二重引用符を引用符で囲み、エスケープします。

$ cat quotes.txt 
I'm Alice
$ sed -e "s/'/\"/g"  quotes.txt 
I"m Alice

一重引用符は次のとおりです。いいえ二重引用符は特別なのでエスケープできません。

逆に誰か交換したいならバックティック`)は、元の質問で述べたように、単一引用符の中にあるまま使用できます。

$ cat ticks.txt
`this is in backticks`
$ sed -e 's/`/"/g'  ticks.txt
"this is in backticks"

二重引用符内でバックティックをバックスラッシュにエスケープする必要があります。それ以外の場合は、古い形式のコマンド置換が開始されます。

また見なさい:

答え2

Bashを使用すると、エスケープしようとしても一重引用符で囲まれた文字列に一重引用符を含めることはできません。

いくつかのオプション:

  1. ilkkachuが提案したように二重引用符を使用してください。"s/'/\"/g"
  2. 文字列セグメント接続:'s/'"'"'/"/g'または's/'\''/"/g'
  3. 使うANSI-Cの引用:$'s/\'/"/g'
  4. コンテンツ全体を引用しないでエスケープする必要がある文字をエスケープします。s/\'/\"/g

答え3

単一文字変更の場合、trおそらく最速です。

tr \' \" <infile >outfile

シェル環境では、両方の引用符をエスケープする必要があります。または、同じファイル内で置き換えるには(パッケージsponge内)を使用します。moreutils

tr \' \" <infile | sponge infile

関連情報