2014-01-18 88 views
1

我試圖找到\ STRING1 \與\ STRING2替換\(介意反斜槓)無法景觀的反斜槓sed的

我試過如下:

find ./ -type f -exec sed -i "s/\\STRING1\\/\\STRING2\\/g" {} \; 

這沒」 t工作,我得到這個錯誤:sed:-e表達式#1,字符21:未終止的'命令

我搜索了網絡和人們建議添加兩個反斜槓我想要搜索和/或更換。所以我試過這個:

find ./ -type f -exec sed -i "s/\\\STRING1\\\/\\\STRING2\\\/g" {} \; 

這次我沒有錯誤,但沒有做任何事情。有什麼問題?

回答

3

使用單引號:

> echo "some text\STRING1\ and some more \STRING1\andeven more" | sed 's/\\STRING1\\/\\STRING2\\/g' 
some text\STRING2\ and some more \STRING2\andeven more 
+0

我認爲你沒有考慮到發現 – user1336449

+0

是的。在shell中始終使用單引號作爲命令參數,除非您希望shell在參數中擴展變量或執行其他文本替換。然後,雙引號是你想要的。 – Ned

+0

@ user1336449:是的,我想你可以算出那部分。只需在您的聲明中用單引號替換雙引號即可。不需要其他改變。 –

0

如果你想用雙引號引用您的sed命令,那麼你必須使用反斜槓得到的圖案單反斜線:

find ./ -type f -exec sed -i "s/\\\\STRING1\\\\/\\\\STRING2\\\\/g" {} \; 

這是因爲反斜槓是雙引號外殼字符串的實元字符,所以外殼將反斜槓數量減半,然後sed也是如此。或者,按照其他答案中的建議使用單引號。

0

您需要使用單引號字符串。 如果使用雙引號,則字符串將由您的shell進行預處理,並且sed只接收單個反斜槓。