我正在尝试使用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: `?'
答案 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