Linux Grep使用正则表达式并使用组捕获
我有多个文本文件,其中包含以下行: “”“版本:3.4.0.0 xxx xxx xxx“ 我试图从每个文本文件中捕获3.4.0.0并显示在终端上。 我写的命令是: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模式中的任何字符,但不匹
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
看
详细信息
-版本
字符串版本
-用0+空格括起来的冒号\s*:\s*
-匹配重置运算符\K
-1+位,然后\d+
-1个或多个重复的(?:\。\d+)
和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