正则表达式或在 python 中拆分为 shell awk 等效

Mar*_*cos 5 python regex bash awk split

我有一个代理版本文件,我需要解析它才能获取应用程序版本详细信息。版本文件的(示例)内容/opt/app_folder/agent_version.txt如下:

Version: 10.2.4.110
Pkg name: XXXX-10.2.4-Agent-Linux-x86_64
Revision: 110
Patch version: 23
Run Code Online (Sandbox Code Playgroud)

我需要输出为 1st 3 个数字 fromVersion和数字 from Release version。例如:

Current Version: 10.2.4.23
Run Code Online (Sandbox Code Playgroud)

所以,我使用下面的方法在 shell 中使用 awk

FILE=/opt/app_folder/agent_version.txt

my_ver=`awk -F[:.] '/Version/ {gsub(" ",""); print $2"."$3"."$4}' ${FILE}`
            OR
my_ver=`awk -F[-] '/Pkg/ {print $2}' ${FILE}`

my_patch=`awk -F[:.] '/version/ {gsub(" ",""); print $NF}' ${FILE}`
my_cur_ver="$my_ver.$my_patch"

echo $my_cur_ver
10.2.4.23
Run Code Online (Sandbox Code Playgroud)

我如何在 Python 中实现这个结果?使用正则表达式或拆分或两者的组合?

我使用Python 3.3RHEL 6.2 x86_64

tal*_*alz 1

假设txt保存文件的内容,这将为您提供版本:

import re
version = re.findall("Version:\s+((?:\d+\.){3})", txt)[0] + re.findall("Patch version:\s+(\d+)", txt)[0]
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想使用一种正则表达式:

version = ''.join(re.findall("Version:\s+((?:\d+\.){3}).*Patch version:\s+(\d+)", txt, re.DOTALL)[0])
Run Code Online (Sandbox Code Playgroud)