gpt4 book ai didi

linux - 使用正则表达式进行 Grep 并使用组进行捕获

转载 作者:太空狗 更新时间:2023-10-29 12:08:50 25 4
gpt4 key购买 nike

我有多个包含如下行的文本文件:“”“版本:3.4.0.0xxxxxxxxx"""我正在尝试从每个文本文件中捕获 3.4.0.0 并显示在终端上。我写的命令是这样的:

grep -m1 'Version[\s\S]*?(\d[\s\S]+?)\n' *.txt

grep -m1 'Version[\s\S]*?(\d[\s\S]+?)\n' *.txt

我无法使用上述代码获得任何结果。有人可以帮我解决这个问题吗?

最佳答案

您的模式是符合 PCRE 的正则表达式,[\s\S]匹配 PCRE 模式中的任何字符,但不匹配您在 grep 中使用的 POSIX BRE 正则表达式风格因为你没有使用 -P选项。

如果你想用 GNU grep 使用

grep  -oPm 1 'Version\s*:\s*\K\d+(?:\.\d+)+' *.txt

参见 this online demo

详情

  • Version - Version字符串
  • \s*:\s* - 用 0+ 个空格括起来的冒号
  • \K - 匹配重置运算符
  • \d+ - 1+ 位数字然后
  • (?:\.\d+)+ - 1 次或多次重复 .和 1 位以上的数字。

你可以用 awk 做到这一点:

awk '/^Version : [0-9]+/{print $3; exit}' *.txt

参见 online awk demo :

s="Text
Version : 3.4.0.0 xxx xxx xxx
More text
Version : 5.6.0.0 xxx xxx xxx"
awk '/^Version : [0-9]+/{print $3; exit}' <<< "$s"
# => 3.4.0.0

详情

  • ^Version : [0-9]+查找以 Version : <1 or more digits> 开头的行
  • {print $3; exit}输出字段 3 的值并停止处理,让您得到第一个匹配项。

关于linux - 使用正则表达式进行 Grep 并使用组进行捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56389831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com