2017-03-18 153 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 

這將減少需要擔心上線有關的所有其他特殊字符。正如我的評論中所提到的,這取決於該行的獨特之處?