2017-03-18 155 views
0

我知道类似的问题已被要求previously,many,times。但是,仍然会出现错误。我有串sed替换特殊字符tastic

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

有什么建议?

+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 

这将减少需要担心上线有关的所有其他特殊字符。正如我的评论中所提到的,这取决于该行的独特之处?