sed取代特殊字符tastic

时间:2017-03-18 00:32:55

标签: bash sed special-characters

我意识到类似的问题已经被问到previouslymanytimes。但是,仍然会出错。我有字符串

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

我想改为

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

我已经使用sed来完成类似的特殊任务。我试过了

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 \{\}

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

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

它使用多个单引号部分来避免对特殊字符进行麻烦处理,并结合您需要扩展的变量。注意不要在引用的部分和变量之间添加任何空格,否则它们将被bash解析为多个标记。

答案 1 :(得分:-1)

如果您知道dom0Size只有一个引用,您可以执行以下操作:

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

这样可以最大限度地减少担心线路上所有其他特殊字符的需要。正如我在评论中提到的,这取决于线条的独特之处?