版本和pkgname提取

时间:2018-06-11 13:46:35

标签: string bash awk sed

我在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)

2 个答案:

答案 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和连字符,直到倒数第二个。