Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Grep使用正则表达式并使用组捕获_Linux_Terminal_Grep - Fatal编程技术网

Linux Grep使用正则表达式并使用组捕获

Linux Grep使用正则表达式并使用组捕获,linux,terminal,grep,Linux,Terminal,Grep,我有多个文本文件,其中包含以下行: “”“版本:3.4.0.0 xxx xxx xxx“ 我试图从每个文本文件中捕获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模式中的任何字符,但不匹

我有多个文本文件,其中包含以下行: “”“版本:3.4.0.0 xxx xxx xxx“ 我试图从每个文本文件中捕获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

详细信息

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

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

s=“文本
版本:3.4.0.0 xxx xxx xxx
更多文本
版本:5.6.0.0 xxx xxx“

awk'/^Version:[0-9]+/{print$3;exit}'@Div很高兴它对您有用。请考虑通过点击来接受答案。✓ 在左边(参见)。
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