Bash 从版本号中删除内部版本号:1.3.0.342应变为1.3.0
对于Jenkins构建脚本,我需要从版本中删除构建编号。我需要以Bash 从版本号中删除内部版本号:1.3.0.342应变为1.3.0,bash,sed,grep,Bash,Sed,Grep,对于Jenkins构建脚本,我需要从版本中删除构建编号。我需要以MajorVersion.MinorVersion.BugfixVersion结束。这些数字不是固定的一位数。如果它们已经有三个版本号,则不应发生任何事情: 1.30.0.342 -> 1.30.0 100.3.0.32 -> 100.3.0 1.3.1234.3 -> 1.3.1234 1.3.0 -> 1.3.0 如何使用grep/sed正确执行此操作 我的输入来自一个变量 export VERSION
MajorVersion.MinorVersion.BugfixVersion
结束。这些数字不是固定的一位数。如果它们已经有三个版本号,则不应发生任何事情:
1.30.0.342 -> 1.30.0
100.3.0.32 -> 100.3.0
1.3.1234.3 -> 1.3.1234
1.3.0 -> 1.3.0
如何使用grep/sed正确执行此操作
我的输入来自一个变量
export VERSION="$(gulp config --silent --getWidgetAttr=version)"
如果需要三个部分(MajorVersion.MinorVersion.BugfixVersion) 你可以用“切”来得到这个
如果需要三个部分(MajorVersion.MinorVersion.BugfixVersion) 你可以用“切”来得到这个
使用grep时,如果变量存储在
infle
:
$ grep -Eo '^([^.]+\.){2}[^.]+' infile
1.30.0
100.3.0
1.3.1234
1.3.0
这将模式锚定在行的开头,查找“一个或多个非周期,后跟一个周期”(重复两次),后跟“一个或多个非周期”。-o
标志仅保留匹配的零件
或者,在带有参数扩展的纯(和模糊)Bash中(需要扩展glob,shopt-s extglob
):
这将“从字符串末尾移除”、“${var%pattern}”
与“从字符串开头移除(最长匹配)”、“${var##pattern}”
,其中从末尾移除的pattern
是“从开头移除”模式的扩展
extglob
需要将+([[:digit:}})中的“一个或多个”与grep匹配,如果变量存储在infle
:
$ grep -Eo '^([^.]+\.){2}[^.]+' infile
1.30.0
100.3.0
1.3.1234
1.3.0
这将模式锚定在行的开头,查找“一个或多个非周期,后跟一个周期”(重复两次),后跟“一个或多个非周期”。-o
标志仅保留匹配的部分
或者,在带有参数扩展的纯(和模糊)Bash中(需要扩展glob,shopt-s extglob
):
这将“从字符串末尾移除”、“${var%pattern}”
与“从字符串开头移除(最长匹配)”、“${var##pattern}”
,其中从末尾移除的pattern
是“从开头移除”模式的扩展
extglob
需要匹配+([[:digit:}})中的“一个或多个”
您也可以使用here字符串:
cut -f1-3 -d. <<< "1.30.0.342"
cut
命令从分隔的文本行中提取值
-f1-3
=>提取字段1到3
-d.
=>。是分隔符,无需将其括在引号中
您也可以使用here字符串执行此操作:
cut -f1-3 -d. <<< "1.30.0.342"
cut
命令从分隔的文本行中提取值
-f1-3
=>提取字段1到3
-d.
=>。是分隔符,无需将其括在引号中
如果只需要提取3个组件的版本号,而不单独作用于它们的组件,显然是最简单的选择
下面是一个awk
解决方案,如果需要对组件进行单独处理,可能会引起兴趣(在awk
脚本中,$1
表示第一个组件,$2
表示第二个组件,…):
$awk'BEGIN{FS=OFS=“.”}{if(NF>3){NF=3}}}}1'如果只需要提取3个组件版本号,而不单独作用于它们的组件,显然是最简单的选择
下面是一个awk
解决方案,如果需要对组件进行单独处理,可能会引起兴趣(在awk
脚本中,$1
表示第一个组件,$2
表示第二个组件,…):
$awk'BEGIN{FS=OFS=“.”}{if(NF>3){NF=3}1'什么是-f1-3
代表的?-f1-3=字段1到3什么是-f1-3
代表的?-f1-3=字段1到3您的输入看起来像什么?是在文件中还是已经在shell变量中?您的输入看起来像什么?是在文件中还是已经在shell变量中?
cut -f1-3 -d. <<< "$build"
$ awk 'BEGIN { FS=OFS="." } { if (NF > 3) { NF = 3 } } 1' <<'EOF'
1.30.0.342
100.3.0.32
1.3.1234.3
1.3.0
EOF
1.30.0
100.3.0
1.3.1234
1.3.0