sed命令用'root'替换'root'@'localhost'@'%'

时间:2016-07-26 20:34:13

标签: linux replace sed quotes

我正在尝试使用sed'root'@'localhost'替换为'root'@'%'但没有成功。有人可以帮我解释一下这个命令吗?

我尝试了以下内容:

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: `?'

2 个答案:

答案 0 :(得分:0)

首先,确保您使用单引号。 (a.k.a。’或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 '/root.@.localhost/s/localhost/%/' file.sql

答案 1 :(得分:0)

字符对我来说并不像单引号(')。确保使用单引号。

您实际输入的字符是" right single quote mark"。我们称之为"单引号"实际上是" apostrophe"。

以下内容应该有效:

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

或者,你的第一个选择,但有双引号,以避免必须逃避嵌入的单引号(我认为是撇号):

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