二重アポストロフィの代わりに単一のアポストロフィを試してみてください。しかし、正しくできませんでした。
sed 's/'/"/'
ベストアンサー1
Bourneなどのシェルでは、一重引用符を一重引用符でエスケープできないため、シェルのコマンド'\''
ラインまたはスクリプトで一重引用符で囲まれた文字列に一重引用符を含める標準的な方法も同様です。実際には一重引用符は含まれませんが、目的の最終結果が得られます。
'\''
= '
(引用符の終わり)\'
(引用符のエスケープ)と'
(引用符を開く)。
つまり、そうではありません:
sed 's/'/"/g'
使用:
sed 's/'\''/"/g'
または、二重引用符内でバックスラッシュでエスケープすることができるので、以下を使用できます。
sed "s/'/\"/g"
この形式に注意してください。文字列リテラルとして処理するシェルメタ文字を二重引用符で囲んでエスケープする必要があります。たとえば、fooを現在のシェル変数の値で置き換えるsed 's/foo/$bar/'
文字列リテラルで置き換えます(定義されていない場合は何も置き換えられません。)注:変数の一部の値はsedコマンドを中断する可能性があります。 (これはsedコマンドで構文エラーを引き起こします)$bar
sed "s/foo/$bar/"
$bar
$bar
$bar
bar='a/b'
s/foo/a/b/
別の(おそらく最良の)代替案は、引用符を使用して$''
文字列を引用することです。この引用スタイルを使用すると、単一引用符をエスケープできます。これはシェルが引用符付き文字列を解釈する方法を変更するため、文字列に別のエスケープ文字または文字列が含まれている場合は、他の副作用がある可能性があります(たとえば、「\xHH
HH」は内部8ビット文字の16進数として解釈されます)。$''
)。引用符がない場合、または二重引用符内にある場合は、平文「xHH」と解釈されます。
sed $'s/\'/"/g'
注:$''
bash、ksh、zshなどに適用されます。では動作しませんdash
。