我在bash脚本中有以下变量。
xyz-0.3.2-3
abc-xyz-tools-0.1-1
def-yz-7.3.0-1.0.0
结果应该是:
pkg: xyz and version of xyz : 0.3.2-3
pkg: abc-xyz-tools version of abc-xzy-tools: 0.1-1
pkg: def-yz version of def-yz: 7.3.0-1.0.0
由于pkg名称的字长和版本不同 它有不同的长度,有点棘手。
我们将不胜感激。 (bash,sed,awk将是首选lang)
答案 0 :(得分:0)
编辑 :使用包名称代码。
awk --re-interval '
match($0,/([a-zA-Z]+\-+){1,}/){
val=substr($0,RSTART,RLENGTH-1);
print "pkg: " val " and version of " val " : " substr($0,RSTART+RLENGTH)
}' Input_file
您可以尝试关注awk
并告诉我这是否对您有所帮助。(如果您有更新版本的--re-interval
,请移除awk
。)
awk --re-interval 'match($0,/([a-zA-Z]+\-+){1,}/){print substr($0,RSTART+RLENGTH)}' Input_file
答案 1 :(得分:0)
sed
$ sed -E 's/([a-z-]+)-([^-]+-[^-]+$)/package: \1\tversion: \2/' file |
column -ts$'\t'
package: xyz version: 0.3.2-3
package: abc-xyz-tools version: 0.1-1
package: def-yz version: 7.3.0-1.0.0
第二个捕获组用于捕获连字符周围的最后两个标记。第一个捕获组都是alpha和连字符,直到倒数第二个。