此命令如预期的那样工作:
$ echo "foo}bar]baz" | sed 's/}/@/g; s/]/@/g'
foo@bar@baz现在,我尝试使用以下字符类来做同样的事情:
$ echo "foo}bar]baz" | sed 's/[}\]]/@/g'
foo}bar]baz这是行不通的。我想要一个包含两个字符}和]的字符类,所以我认为像}\]这样的方括号转义是可行的,但它没有效果。
我遗漏了什么?
发布于 2020-06-02 20:09:08
您可以使用“智能”位置:
echo "foo}bar]baz" | sed 's/[]}]/@/g'在这里,]字符必须出现在打开的方括号后面,否则,它将被视为括号表达式(近括号),而括号表达式过早地关闭。
请注意,如果您希望在括号表达式中安全地使用-,则可以在紧凑型方括号之前使用它。
发布于 2020-06-02 20:11:49
这可以在bash本身中完成,而无需调用任何外部实用程序(如awk或sed )。
s="foo}bar]baz"
echo "${s//[]\}]/@}"
foo@bar@baz另一个选择是tr
tr '[]}]' '@' <<< "$s"
foo@bar@bazhttps://stackoverflow.com/questions/62160527
复制相似问题