2016-07-26 104 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