2012-02-09 56 views
16

我試圖用這個命令替換:SED查找和使用大括號

sed -i 's#\{test1\}#test2#' /example/myfile.txt 

要與test2取代的{test1}實例。

我得到的錯誤:

sed: -e expression #1, char 17: Invalid preceding regular expression 

我不能正確地轉義大括號?

+1

嗯..我刪除了反斜槓,它似乎工作正常。 – atdev 2012-02-09 05:26:43

回答

22
sed -i 's#{test1}#test2#' /example/myfile.txt 

你不需要逃避{}

21

你是不是轉義大括號的。在sed中,默認的正則表達式是BRE,其中\{\}表示範圍表達式。由於test1不是範圍,您的BRE不正確。

要解決它,你既可以丟棄反斜槓(括號並不是特別在BREs)或保持不變,告訴SED使用ERES(-r標誌與GNU的sed,-E標誌和BSD/MacOSX的SED)。

+0

TIL BRE ERE。 BREs在'sed'世界非常方便。 – ericsoco 2016-12-29 20:37:16