word-3.3.7 (in xyz)
word-3.30.7 (in lib)
word-3.56 (in pwd)
word-3 (in abc)
word (in lib)
word-32.3 (in pqr)
word-32.3.5 (in sfw)我想要grep从随机文本列表中捕获这些输出。
基本上是一个grep正则表达式,它捕获了以下泛化文本:
单词\\word--任意数量的带有“.”的数字(在
我试过:
egrep "word [(in ]|word-[0-9].[0-9].[0-9] [(in ]"但这并不是真正有效的,因为空白空间有限。
发布于 2019-06-18 06:52:05
您可以使用此grep
grep -oE '^([_[:alnum:]]+|[_[:alnum:]]+-[.0-9]+)[[:space:]]+\(in' file
word-3.3.7 (in
word-3.30.7 (in
word-3.56 (in
word-3 (in
word (in
word-32.3 (in
word-32.3.5 (inRegex详细信息:
^:行启动(:开始一个小组[_[:alnum:]]+:匹配1+单词字符|:或[_[:alnum:]]+-[.0-9]+:匹配1+单词字符,后面跟着-和1+数字或点);末端群[[:space:]]+:匹配1+空格字符\(in:匹配文字(和in发布于 2019-06-18 07:48:15
对于GNU grep,您可以使用:
grep -oP '^word(?:-\d+(?:\.\d+)*)*\s+\(in' word
word-3.3.7 (in
word-3.30.7 (in
word-3.56 (in
word-3 (in
word (in
word-32.3 (in
word-32.3.5 (in其中word是文件:
some stuff
more stuff
word stuff
word-3.3.7 (in xyz)
word-3.30.7 (in lib)
word-3.56 (in pwd)
word-3 (in abc)
word (in lib)
word-32.3 (in pqr)
word-32.3.5 (in sfw)
word-2 stuff
more stuff
some stuff解释:
-oP仅用于显示输出并使用perl样式regex。^word行从word开始(?: )非捕获群-\d+一个破折号,后面跟着几个数字匹配,例如-3(?:\.\d+)* --这将匹配.30或.30.7,一个点,后面跟着0到N次出现的数字\s+\(in空间字符后面是(和in演示:
https://regex101.com/r/0fYFcD/1/
注意:这个正则表达式比anubhava的正则表达式更有限制性,因为它强制要求行的开头是word。
https://stackoverflow.com/questions/56643203
复制相似问题