适用于 OSx 和 Linux 以提取两个字符串之间的值的方法?

Method which works on OSx and Linux to extract value between two strings?

给定以下字符串,我如何使用适用于 Linux 和 OSX 的方法编写脚本来提取“12.0”? sed 示例适用于 Linux,但不适用于 OSX,因为使用的正则表达式在 OSX 中无效。有没有一种通用的方法可以使用 awk 来做到这一点?还研究了使用 'grep -oP' 的变体,但这对 OSX 也不起作用...天哪

示例字符串

Version=12.0;REG_SZ
Version=12.0; REG_SZ
Version=                       12.0;                       REG_SZ

正则表达式捕获以使用 sed 在两个字符串之间获取值

sed -e 's/Version=\s\+\(.*\);.*REG_SZ//g'

由于您的 sed 和 awk 似乎无法处理 \s,您可以尝试将 \s 替换为 space 和制表符:

awk 'match([=10=],/^Version[ \t]*=[ \t]*([^;]*);.*$/,ary) {print ary[1]}'

sed -e 's|^Version[ \t]*=[ \t]*\([^;]*\);.*$||g'

也可以尝试明确使用 gawk(或 nawk)(如果可用)。

我无法使用 BSD/OSX 盒子进行测试,但这应该是便携的:

sed 's/[^=]\+=[[:blank:]]*\([^;]\+\).*//'

如果您只需要在包含 "REG_SZ" 的行上执行此操作,则

sed -n '/REG_SZ/s/[^=]\+=[[:blank:]]*\([^;]\+\).*//p'

\s\+ 都是不可移植的。使用任何 sed:

$ sed -n 's/Version=[ \t]*\([^;]*\).*//p' file
12.0
12.0
12.0