无论如何你可以使用sed像java正则表达式模式/匹配/组一样做正则表达式匹配组吗?
如果我有字符串
test-artifact-201251-balbal-0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
我如何使用sed只是为了得到如下结果:
test-artifact-0.1-SNASHOT.jar
Run Code Online (Sandbox Code Playgroud)
我想知道sed允许你做一些像java正则表达式的东西,你定义的模式如下:
([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)([.]*SNAPSHOT.jar)
Run Code Online (Sandbox Code Playgroud)
然后你可以得到如下数组的结果:
test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
Bir*_*rei 59
您必须将括号转义为组表达式:
\([a-z]*-[a-z]*-\)\([0-9]*-\)\([a-z]*-\)\([.]*SNAPSHOT.jar\)
Run Code Online (Sandbox Code Playgroud)
并与使用它们\1
,\2
等等.
编辑:还要注意之前SNAPSHOT
是[.]
不会匹配.括号内.
是字面意思.它应该是[0-9.-]*
Ste*_*eve 16
这就是Birei和Thor的意思:
sed -r "s/([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)(.*)/\1\n\2\n\3\n\4/"
Run Code Online (Sandbox Code Playgroud)
输出:
test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
对于那些常规字符串,awk可以帮助您避免分组.:)
你只需给出你想要的零件索引编号:
awk 'BEGIN{FS=OFS="-"}{print $1,$2,$5,$6}'
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)