首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用sed的正则表达式中包含可选字符

在使用sed的正则表达式中包含可选字符
EN

Stack Overflow用户
提问于 2019-04-14 19:02:38
回答 2查看 1K关注 0票数 1

我有以下字符串:

代码语言:javascript
运行
复制
setenv run_area1 root/test1/Apr14_2019_10_32_39/dummy
setenv area2 root/test2/Aug23_2017_14_25_56/dummy
setenv run_area3 testRun/test1/blue_Apr14_2019_08_56_48/dummy/
setenv area4 testRun/test2/Aug23_2017_14_26_03/thing2

我想将日期替换为[DATE],如下所示:

代码语言:javascript
运行
复制
setenv run_area1 root/test1/[DATE]/dummy
setenv area2 root/test2/[DATE]/dummy
setenv run_area3 testRun/test1/blue[DATE]/dummy/
setenv area4 testRun/test2/[DATE]/thing2

我必须使用sed,所以我写了以下命令:

代码语言:javascript
运行
复制
sed 's|[A-Z][a-z]*[0-9]*_[0-9]*_[0-9]*_[0-9]*_[0-9]*|[DATE]|g'

它适用于字符串,但适用于以下字符串:

代码语言:javascript
运行
复制
setenv run_area3 testRun/test1/blue_Apr14_2019_08_56_48/dummy/

我得到了:

代码语言:javascript
运行
复制
setenv run_area3 testRun/test1/blue_[DATE]/dummy/

我正在寻找一种在正则表达式中使用_的方法。在perl中,我知道我可以使用像(_|)这样的东西,所以_是可选的。我也可以使用?。在前面的线程中,我看到基本的sed不包括这些选项,我需要使用\{0,1\}。(link)。问题是,我似乎无法理解\{0,1\}是如何解决这个问题的。还有其他的解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2019-04-14 22:14:06

BRE中的\{0,1\}是一个正则表达式间隔,表示0 to 1 repetitions of the preceding expression,这与ERE中的?相同(从技术上讲,在ERE中它被定义为0 _or_ 1,但这是一组相同的值!)即前面的表达式是可选的。

使用任何POSIX sed:

代码语言:javascript
运行
复制
$ sed 's/_\{0,1\}[[:upper:]][[:lower:]]*[0-9]*\(_[0-9]*\)\{4\}/[DATE]/' file
setenv run_area1 root/test1/[DATE]/dummy
setenv area2 root/test2/[DATE]/dummy
setenv run_area3 testRun/test1/blue[DATE]/dummy/
setenv area4 testRun/test2/[DATE]/thing2
票数 2
EN

Stack Overflow用户

发布于 2019-04-14 19:54:57

因为sed使用的是defaultbasic regular expression。关于basic regular expressionextended regular expression的区别,请参考此link

如果您想使用extended regular expression支持的功能。您必须使用-r选项显式地告诉sed 。

因此,对于GNU ,下面的脚本实际上做了同样的事情。

代码语言:javascript
运行
复制
sed 's|_\?[A-Z][a-z]*[0-9]*_[0-9]*_[0-9]*_[0-9]*_[0-9]*|[DATE]|g' textfile

sed -r 's|_?[A-Z][a-z]*[0-9]*_[0-9]*_[0-9]*_[0-9]*_[0-9]*|[DATE]|g' textfile
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55674543

复制
相关文章

相似问题

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