如何使用sed在命令行中提取单个值?

时间:2017-05-15 15:04:27

标签: linux sed

我试图从我的Travis-CI配置中的环境变量中提取信息,所以我正在寻找一个基于我的正则表达式执行此操作的1行linux命令。这是我正在尝试的内容:

  - MAJOR_VERSION=`sed -i 's/[v?]((([\d]+)\.[\d]+)\.[\d]+)/$1/g' <<< ${TRAVIS_TAG}`
  - MINOR_VERSION=`sed -i 's/[v?]((([\d]+)\.[\d]+)\.[\d]+)/$1.$2/g' <<< ${TRAVIS_TAG}`
  - PATCH_VERSION=`sed -i 's/[v?]((([\d]+)\.[\d]+)\.[\d]+)/$1.$2.$./g' <<< ${TRAVIS_TAG}`

看起来sed需要一个或多个文件,因为我收到错误sed: no input files,而不是字符串。我怎么能让它期待一个字符串?

我的目标是采用语义版本标记(例如 - v12.34.5612.34.56并提取版本号。

1 个答案:

答案 0 :(得分:1)

目前尚不清楚为什么要使用sed。如果TRAVIS_TAG只包含“xx.xx.xx”形式的字符串,那么您只需阅读它:

IFS=. read MAJOR_VERSION MINOR_VERSION PATCH_VERSION <<< "$TRAVIS_TAG"

如果您担心要放弃的可能前导v

IFS=. read MAJOR_VERSION MINOR_VERSION PATCH_VERSION <<< "${TRAVIS_TAG#v}"