gsub函数则使得在所有正则表达式被匹配的时候都发生替换
gsub(regular expression, subsitution string, target string);简称 gsub(r,s,t)
sub匹配第一次出现的符合模式的字符串,相当于 sed ‘s//’ 。
gsub匹配所有的符合模式的字符串,相当于 sed ‘s//g’
实例一
将|分割第二个域中的数字去掉
echo “0001|20081223efskjfdj|EREADFASDLKJCV” |awk -F ‘|’ ‘BEGIN{ OFS=”|” } {gsub(/[0-9]+/,”“,
2);print
0}’
0001|efskjfdj|EREADFASDLKJCV
实例二
/分割,取出snapshots后面知道倒数第四个之间的域(其中/的数不确定,所以不大方便直接使用awk
6,
7,$8来直接取,使用字段截取),.隔开 com.netfinworks.authorize
示例
/Users/yfan/Downloads/dsc20170801_jar/snapshots/com/netfinworks/authorize/authorize-service/1.0.0-SNAPSHOT/authorize-service-1.0.0-SNAPSHOT.jar
先设置一个变量
yfandeMacBook-Pro:pbs yfan$ test=/Users/yfan/Downloads/dsc20170801_jar/snapshots/com/netfinworks/authorize/authorize-service/1.0.0-SNAPSHOT/authorize-service-1.0.0-SNAPSHOT.jar
用Linux中的符号截断(##)去掉com前面的部分
yfandeMacBook-Pro:pbs yfan$ echo ${test##*snapshots/}
结果
com/netfinworks/authorize/authorize-service/1.0.0-SNAPSHOT/authorize-service-1.0.0-SNAPSHOT.jar
在用awk结合gsub去掉后面的部分(倒数第一、第二、第三域)
yfandeMacBook-Pro:pbs yfan$ echo ${test##*snapshots/}|awk -F'/' '{gsub("/"$(NF-2)"/"$(NF-1)"/"$NF,"");print}'
结果
com/netfinworks/authorize
最后再用sed用.替换/,完成目标
yfandeMacBook-Pro:pbs yfan$ echo ${test##*snapshots/}|awk -F'/' '{gsub("/"$(NF-2)"/"$(NF-1)"/"$NF,"");print}'|sed 's/\//./g'
结果
com.netfinworks.authorize
gsub说明参考:
http://blog.sina.com.cn/s/blog_67e34ceb0100ybvg.html