首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sed -如何使用sed执行regex组

sed -如何使用sed执行regex组
EN

Stack Overflow用户
提问于 2012-07-25 13:33:22
回答 4查看 73.7K关注 0票数 55

您是否可以使用sed进行regex匹配组,比如java regex模式/匹配/组?

如果我有类似的字符串

代码语言:javascript
复制
test-artifact-201251-balbal-0.1-SNAPSHOT.jar

我如何使用sed来获得这样的结果:

代码语言:javascript
复制
test-artifact-0.1-SNASHOT.jar

我想知道sed是否允许您执行类似java regex之类的操作,您可以定义如下模式:

代码语言:javascript
复制
([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)([.]*SNAPSHOT.jar)

然后,您可以将结果作为一个数组得到,如下所示:

代码语言:javascript
复制
test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-25 13:46:09

必须将括号转义到组表达式:

代码语言:javascript
复制
\([a-z]*-[a-z]*-\)\([0-9]*-\)\([a-z]*-\)\([.]*SNAPSHOT.jar\)

并与\1\2等一起使用。

编辑:还请注意,就在SNAPSHOT之前,[.]将不匹配。括号中的.是字面的。应该是[0-9.-]*

票数 77
EN

Stack Overflow用户

发布于 2012-07-25 13:59:44

这就是Birei和Thor的意思:

代码语言:javascript
复制
sed -r "s/([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)(.*)/\1\n\2\n\3\n\4/"

输出:

代码语言:javascript
复制
test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
票数 23
EN

Stack Overflow用户

发布于 2012-07-25 14:05:09

事实上,对于那些常规字符串,awk可以使您免于分组。:)

你只需给出你想要的零件索引号:

代码语言:javascript
复制
awk 'BEGIN{FS=OFS="-"}{print $1,$2,$5,$6}' 

产出:

代码语言:javascript
复制
kent$  echo "test-artifact-201251-balbal-0.1-SNAPSHOT.jar"|awk 'BEGIN{FS="-";OFS="-"}{print $1,$2,$5,$6}'
test-artifact-0.1-SNAPSHOT.jar
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11650940

复制
相关文章

相似问题

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