我是使用regex的新手,在理解如何从正则表达式中提取组时遇到了一些问题。我有一个文本文件(example.txt):
libstuff-example1 (>= 6.3.2),
libpackage-example2 (>= 5.2.1),
libtest-example3 (>= 5.2.1)
我试图仅从libpackage行中提取“ 5.2.1”,并将其放入bash脚本的变量中。我尝试做
cat example.txt | grep -oP "libpackage-[a-z- (>=]+(.*)[)],"
但这给了我整行而不是“ 5.2.1”部分。如何从该行中提取第一组,这样我只能得到“ 5.2.1”?
您可以使用
val=$(grep -Po 'libpackage-.* \K[0-9.]+' example.txt)
详细资料:
-Po
-启用PCRE正则表达式引擎(P
),并仅输出匹配项(带有o
)libpackage-.* \K[0-9.]+
-match libpackage-
,然后是任何文本,一个空格,然后忽略所有匹配的文本,然后匹配并返回一个或多个数字或点。观看在线演示:
s='libstuff-example1 (>= 6.3.2),
libpackage-example2 (>= 5.2.1),
libtest-example3 (>= 5.2.1)'
val=$(grep -Po 'libpackage-.* \K[0-9.]+' <<< "$s")
echo "$val"
# => 5.2.1
GNUawk
方式:
val=$(awk -F'[ ()]+' '/^libpackage-/{print $3}' example.txt)
请参阅此在线演示。
在此,-F'[ ()]+'
将字段分隔符设置为一个或多个空格或括号,/^libpackage-/
找到以开头的行,libpackage-
并{print $3}
打印(“返回”)字段(列)3的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句