这个命令按照预期运行:
$ echo "foo}bar]baz" | sed 's/}/@/g; s/]/@/g'
foo@bar@baz
现在我正在尝试使用字符类来完成相同的事情,像这样:
$ echo "foo}bar]baz" | sed 's/[}\]]/@/g'
foo}bar]baz
这样做没有起作用。我想要一个由两个字符}
和]
组成的字符类,所以我尝试通过转义方括号来实现,例如}\]
,但是并没有成功。
我错过了什么?
这个命令按照预期运行:
$ echo "foo}bar]baz" | sed 's/}/@/g; s/]/@/g'
foo@bar@baz
现在我正在尝试使用字符类来完成相同的事情,像这样:
$ echo "foo}bar]baz" | sed 's/[}\]]/@/g'
foo}bar]baz
这样做没有起作用。我想要一个由两个字符}
和]
组成的字符类,所以我尝试通过转义方括号来实现,例如}\]
,但是并没有成功。
我错过了什么?
(原文已保留HTML标记,无需翻译)
echo "foo}bar]baz" | sed 's/[]}]/@/g'
请查看在线sed
演示
这里,]
字符必须紧跟开方括号后出现,否则它会被视为括号表达式的关闭括号,从而提前关闭括号表达式。
请注意,如果您想在括号表达式中安全地使用-
,可以将其放在关闭方括号之前。
这可以在bash
中完成,而无需调用任何外部实用程序,如awk
或sed
:
s="foo}bar]baz"
echo "${s//[]\}]/@}"
foo@bar@baz
tr
:tr '[]}]' '@' <<< "$s"
foo@bar@baz