sed – 如何使用sed来执行正则expression式组

有没有反正你可以做正则expression式匹配组使用sed像Java正则expression式模式/匹配/组?

如果我有像string

test-artifact-201251-balbal-0.1-SNAPSHOT.jar 

我如何使用sed来得到如下结果:

 test-artifact-0.1-SNASHOT.jar 

我想知道sed是否允许你做类似java的正则expression式,你定义的模式如:

 ([az]*-[az]*-)([0-9]*-)([az]*-)([.]*SNAPSHOT.jar) 

然后你可以像下面这样得到结果:

 test-artifact- 201251- balbal- 0.1-SNAPSHOT.jar 

Solutions Collecting From Web of "sed – 如何使用sed来执行正则expression式组"

您必须将圆括号转换为组表达式:

 \([az]*-[az]*-\)\([0-9]*-\)\([az]*-\)\([.]*SNAPSHOT.jar\) 

\1\2等一起使用


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

这就是比雷和托尔的意思:

 sed -r "s/([az]*-[az]*-)([0-9]*-)([az]*-)(.*)/\1\n\2\n\3\n\4/" 

输出:

 test-artifact- 201251- balbal- 0.1-SNAPSHOT.jar 

对于那些常规的字符串,awk可以帮你避免分组。 🙂

你只需要提供你想要的零件索引号:

 awk 'BEGIN{FS=OFS="-"}{print $1,$2,$5,$6}' 

输出:

 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 

如果你正在寻找一个更简单的方法,我想这可能是你的帮助! 🙂

 echo "est-artifact-201251-balbal-0.1-SNAPSHOT.jar" | cut -d- -f1,2,5,6 

“ – ”用作分隔符,字段1,2,5,6被打印出来。

注意:这将要求您知道该字段的确切位置。