2016-07-26 107 views
0

我想使用sed沒有成功與'root'@'%'更換表達'root'@'localhost'。有人能幫我執行命令嗎?sed命令替換「根」 @「localhost」的以「根」 @「%」

我試過如下:

sed -i ’s#\’root\’@\’localhost\’#\’root\’@\’%\’#g’ xyz.sql 
sed: -e expression #1, char 1: unknown command: `?' 

sed -i -e ’s/localhost/%/g’ xyz_2616.sql 
sed: -e expression #1, char 1: unknown command: `?' 
+0

別測試時不要使用'sed -i'! – Kusalananda

+0

'sed「s /'root'@'localhost'/'root'@'%'/ g」' – DaBler

+0

謝謝DaBler。有效。 – beginnercoder

回答

0

首先,確保您使用的是單引號。 (又名’或unicode 8217)與ASCII字符39,'不相同。

接下來,您無法在單引號內跳過單引號。 Here's an answer我前段時間寫過這篇文章。

但是,您可以將單引號放在雙引號內,或將它們轉義到單引號字符串之外。例如,下面的任一可能的工作:

sed -e "s/'root'@'localhost'/'root'@'%'/g" file.sql 

sed -e 's/'\''root'\''@'\''localhost'\''/'\''root'\''@'%'\''/g' file.sql 

或者,你可以只替換你感興趣的部分,相信它不會在其他地方出現在同一行:

sed -e '/[email protected]/s/localhost/%/' file.sql 
0

字符看起來並不像一個單引號(')給我。確保你使用的是單引號。

您實際輸入的字符是「right single quote mark」。我們稱之爲「單引號」的實際上是「apostrophe」。

下面應該工作:

sed -e 's/localhost/%/g' rice_2616.sql 

,或者你的第一個辦法,但用雙引號,以避免逃跑的嵌入式單引號(我推測是撇號):

sed -e "s/'root'@'localhost'/'root’@'%'/g" rice_2616.sql