为什么 sed 匹配最小值而不是最大值字符串



我正在尝试从一堆文件中提取数字(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/'

最新更新