2017-03-18 11 views
0

私は同様の質問があることを認識しましたpreviouslymanytimes。しかし、まだエラーが発生します。私は私がそんなに特別な文字重くはない同様のタスクのためにsedを使用しているsedは特殊文字をtasticに置き換えます

dom0Size = ${/ ${d}E-6 ${position_units}} 

に変更したい文字列

dom0Size = ${/ 2E-6 ${position_units}} 

を持っています。私は

sed -i "s?dom0Size = \$\{\/ 2E-6 \$\{position_units\} \}?dom0Size = \$\{\/ 2E-6 \$\{position_units\} \}?g" "test.txt" 

を試してみましたが、でも、これらすべてのエスケープスラッシュと、私はエラー

sed: -e expression #1, char 53: Invalid content of \{\} 

何かアドバイスを得ますか?

+0

あなたのファイルを見るとき、それを一意にするためには、提示された行のすべての文字が必要だと言うのは間違いありませんか?すなわち、 - dom0Size = $ {/ 3E-6 $ {position_units}} ...ここでは、 '3'だけが行を異なるものにしていることがわかります。 – grail

+0

重要な部分は 'dom0Size = $ {/ $ {d} E-6'ですが、すべての特殊文字を使って、私はちょうど完全な行に入れます – user1543042

答えて

1

次を使用することができます。

sed -i 's?dom0Size = ${/ 2E-6 ${position_units}}?dom0Size = ${/ '${d}'E-6 ${position_units}}?g' test.txt 

あなたが展開必要な変数と組み合わせて、特殊文字の面倒な処理を回避するために、複数の単一引用符の部品を使用しています。クォートされた部分と変数の間にスペースを入れないように注意してください。そうしないと、複数のトークンとしてbashによって解析されます。

+0

' $ {d} 'は、だから 'd = 5'と答えてください – user1543042

+0

@ user1543042まあ、私は私の答えを編集しました。 – Aaron

-1

あなたはdom0Sizeへの唯一の単一の参照があることがわかっている場合は、あなたのような何かを行うことができます:

sed -r -i.bak "/dom0Size/s/[0-9]+/$d/2" file 

これはライン上の他のすべての特殊文字を心配する必要性を最小化するだろうし。私のコメントで述べたように、それはそのラインをユニークにするものに依存します。

関連する問題