Regex 如何通过sed提取这些字段?

Regex 如何通过sed提取这些字段?,regex,sed,Regex,Sed,我试图在下面的行中对单个数量进行grep: foo=24.587 bar=88 fox=jobs sed -e 's/.*\s\(bar=.+\)\s.*/\1/g' 然后提取,比如说,所有的'88'值..列的数量不一致,所以awk后面跟一个cut不能将其剪切 我试着像这样使用sed: foo=24.587 bar=88 fox=jobs sed -e 's/.*\s\(bar=.+\)\s.*/\1/g' 这就把整条线都甩了。我不知道如何更正这个regexp,更重要的是,为什么这个re

我试图在下面的行中对单个数量进行grep:

foo=24.587 bar=88 fox=jobs
sed -e 's/.*\s\(bar=.+\)\s.*/\1/g'
然后提取,比如说,所有的'88'值..列的数量不一致,所以awk后面跟一个cut不能将其剪切

我试着像这样使用sed:

foo=24.587 bar=88 fox=jobs
sed -e 's/.*\s\(bar=.+\)\s.*/\1/g'
这就把整条线都甩了。我不知道如何更正这个regexp,更重要的是,为什么这个regexp没有达到我期望的效果?

使用
-r
(扩展regex)。这更倾向于像您所期望的那样使用regexen。但是,您必须删除括号中的反斜杠:

sed -r 's/.*\s(bar=.+)\s.*/\1/g'
$ echo "foo=24.587 bar=88 fox=jobs" | sed -r 's/.*\s(bar=.+)\s.*/\1/g'
bar=88
使用
-r
(扩展正则表达式)。这更倾向于像您所期望的那样使用regexen。但是,您必须删除括号中的反斜杠:

$ echo "foo=24.587 bar=88 fox=jobs" | sed -r 's/.*\s(bar=.+)\s.*/\1/g'
bar=88

酷!有趣的是,如果我这样做:echo“tau=39.05dos=200iv=2bar=39.05foo=39.06fox=jobs”| sed-r's/*\s(bar=.+)\s./\1/g'我得到了bar和foo@PalaceChan使用
's/*\s(bar=[^]+)\s.*/\1/g'
。不幸的是,
sed
不允许不情愿的量词,如我所见,trixy-trixy。THanks@ExplosionPills由于您将
*
作为regexp的最后一部分,因此替换命令上的
g
标志最多只匹配一次。另外,如果您使用的是GNU sed
\S+
匹配一个或多个非空格。酷!有趣的是,如果我这样做:echo“tau=39.05dos=200iv=2bar=39.05foo=39.06fox=jobs”| sed-r's/*\s(bar=.+)\s./\1/g'我得到了bar和foo@PalaceChan使用
's/*\s(bar=[^]+)\s.*/\1/g'
。不幸的是,
sed
不允许不情愿的量词,如我所见,trixy-trixy。THanks@ExplosionPills由于您将
*
作为regexp的最后一部分,因此替换命令上的
g
标志最多只匹配一次。另外,如果您使用GNU-sed
\S+
匹配一个或多个非空格。您是否尝试匹配
bar=88
=88
,并且是否需要每行潜在的多个匹配项?您是否尝试匹配
bar=88
=88
,并且是否需要每行潜在的多个匹配项?