1

以下のシェルスクリプトではA2D(Vlog-Ams-@Cross)、特殊文字をエスケープして印刷しようとしています。たとえば、置換(\(ますが、sed は効果がありません。

#! /bin/sh
parameter="A2D(Vlog-Ams-@Cross)"
echo $parameter
parameterz=`echo "$parameter" | sed 's/(/\\(/g'`
echo $parameterz

出力は

A2D(Vlog-Ams-@Cross)
A2D(Vlog-Ams-@Cross)

Cシェル端末で同じことをすると、うまくいきます。

何か案は?

4

2 に答える 2

2

バックティック コマンド内でバックスラッシュを使用すると、注意が必要です。sed コマンドがバッククォート内で発生しなかった場合、正しく機能します。ただし、シェルが終了バッククォートを探すときは、1 レベルのバックスラッシュ引用が削除されるため、次のようになります。

sed 's/(/\(/g'

それはノーオペレーションです。シェルで許可されている場合は$(...)、バッククォートの代わりに使用してください。このようにして、これらの引用の問題を回避できます。

于 2012-09-13T19:58:21.097 に答える
1

あなたの交換\\(では、最初\のものは2番目のものをエスケープし\ます。(ただし、 もエスケープする必要があります。

$  echo 'A2D(Vlog-Ams-@Cross)' | sed -e 's/(/\\\(/g' -e 's/)/\\\)/g'
A2D\(Vlog-Ams-@Cross\)
于 2012-09-13T13:42:51.827 に答える