首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在正则表达式字符类中避开结束方括号?

如何在正则表达式字符类中避开结束方括号?
EN

Stack Overflow用户
提问于 2020-06-02 20:06:57
回答 2查看 199关注 0票数 3

此命令如预期的那样工作:

代码语言:javascript
复制
$ echo "foo}bar]baz" | sed 's/}/@/g; s/]/@/g'
foo@bar@baz

现在,我尝试使用以下字符类来做同样的事情:

代码语言:javascript
复制
$ echo "foo}bar]baz" | sed 's/[}\]]/@/g'
foo}bar]baz

这是行不通的。我想要一个包含两个字符}]的字符类,所以我认为像}\]这样的方括号转义是可行的,但它没有效果。

我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-02 20:09:08

您可以使用“智能”位置:

代码语言:javascript
复制
echo "foo}bar]baz" | sed 's/[]}]/@/g'

online sed demo

在这里,]字符必须出现在打开的方括号后面,否则,它将被视为括号表达式(近括号),而括号表达式过早地关闭。

请注意,如果您希望在括号表达式中安全地使用-,则可以在紧凑型方括号之前使用它。

票数 1
EN

Stack Overflow用户

发布于 2020-06-02 20:11:49

这可以在bash本身中完成,而无需调用任何外部实用程序(如awksed )。

代码语言:javascript
复制
s="foo}bar]baz"
echo "${s//[]\}]/@}"

代码语言:javascript
复制
foo@bar@baz

另一个选择是tr

代码语言:javascript
复制
tr '[]}]' '@' <<< "$s"

代码语言:javascript
复制
foo@bar@baz
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62160527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档