我想知道docker-compose的版本号。每个版本的格式不同。
例如:运行docker-compose --version
docker-compose version 1.29.2, build someId
Docker Compose version v2.12.2
我有单独的sed语句来获取版本号,但如果可能的话,我希望将它们组合在一起。
echo `docker-compose --version` | sed -nr 's|^docker-compose version (.*)(,.*)|\1|p'
echo `docker-compose --version` | sed -nr 's|^Docker compose version v(.*)|\1|p'
如果I或两个正则表达式一起使用管道,则引用需要更改为\1或\3,这取决于它被捕获的位置。
有没有更好的方法来使用sed?
4条答案
按热度按时间ecbunoof1#
您可以使用这个单一的
sed
,从问题中显示的两行取得版本号码:明细:
^
:开始[dD]ocker[- ][cC]ompose version
:匹配具有大小写混合字母和连字符/空格分隔符的起始字符串+v?
:匹配1+个空格,后跟可选的v
([^,]+)
:匹配1+个非逗号的任何字符,并在组#1中捕获.*
:匹配所有内容,直到结束\1
:对捕获组#1的反向引用m3eecexj2#
Bash有内置的regex支持(
[[ $string =~ $regex ]]
将match组的内容存储在数组BASH_REMATCH
中),所以这里不需要sed
。下面的代码更详细,但运行起来更快,因为不需要启动任何外部可执行文件:drkbr07n3#
您可以将两个表达式合并为
^
-字符串开始[dD]
-d
或D
ocker
-文字字符串[ -]
-空格或连字符[cC]
-c
或C
ompose version
-固定字符串v?
-可选的v
字符([^, ]*)
-组1:零个或多个除空格和逗号以外的字符.*
-字符串的其余部分。nbysray54#
在GNU
awk
中,请尝试以下awk
代码。使用GNUawk
中的match
函数和正则表达式^([dD]ocker(-c| C)ompose version )v?(([0-9]+\.){2}[0-9]+),?
来获得所需的值。如果找到任何匹配,则将其存储到名为arr
的数组中,并打印arr的元素1st和3rd。