我正在尝试从一堆文件中提取数字(0.000500
eta_x2-0.000500
)。我认为下行会这样做,但我只得到0
而不是0.000500
.
如何获得最大匹配?
find eta* | sed 's/.*([0-9.]+)/1/g'
.*
是贪婪的,所以它会匹配尽可能多的字符。 在这种情况下,.*
将eta_x2-0.00050
与您组中匹配的最终0
进行匹配。
通常这里的答案是只使用 .*?
使用非贪婪匹配,但我认为 sed 不支持这一点。
您应该能够通过要求在开始匹配之前有一个非数字字符来使其工作,这样.*
必须在使用数字之前停止:
sed 's/.*[^0-9.]([0-9.]+)/1/g'
当然,如果您知道所需的数字将紧跟在-
之后,您可以将[^0-9.]
替换为-
,它将以相同的方式工作。
在
最后一个数字之前添加sed中的-
,g是无用的。
find eta* | sed 's/.*-([0-9.]+)/1/'
不需要 sed
find eta* | grep -oP '(?<=-)[s.]+'
find eta* | cut -d'-' -f 2
这应该有效 -
find eta* | sed 's/[^-]*-([0-9]*.[0-9]*)/1/'