Regex 为什么sed匹配最小字符串而不是最大字符串?
我正试图从一堆文件中提取数字(Regex 为什么sed匹配最小字符串而不是最大字符串?,regex,sed,terminal,Regex,Sed,Terminal,我正试图从一堆文件中提取数字(0.000500),这些文件是aláeta_x2-0.000500。 我想下面这行就可以了,但我只得到了0,而不是0.000500 我怎样才能获得最大匹配 find eta* | sed 's/.*\([0-9.]\+\)/\1/g' 在sed中最后一个数字之前添加-,g是无用的 find eta* | sed 's/.*-\([0-9.]\+\)/\1/' 在sed中最后一个数字之前添加-,g是无用的 find eta* | sed 's/.*-\([0-
0.000500
),这些文件是aláeta_x2-0.000500
。
我想下面这行就可以了,但我只得到了0
,而不是0.000500
我怎样才能获得最大匹配
find eta* | sed 's/.*\([0-9.]\+\)/\1/g'
在sed中最后一个数字之前添加
-
,g是无用的
find eta* | sed 's/.*-\([0-9.]\+\)/\1/'
在sed中最后一个数字之前添加
-
,g是无用的
find eta* | sed 's/.*-\([0-9.]\+\)/\1/'
在sed中最后一个数字之前添加
-
,g是无用的
find eta* | sed 's/.*-\([0-9.]\+\)/\1/'
在sed中最后一个数字之前添加
-
,g是无用的
find eta* | sed 's/.*-\([0-9.]\+\)/\1/'
*
是贪婪的,因此它将匹配尽可能多的字符。在这种情况下,*
将匹配eta_x2-0.00050
和您组中匹配的最后一个0
通常,这里的答案是使用*?
使用非贪婪匹配,但我认为sed不支持这一点
在开始匹配之前,您应该能够通过要求有一个非数字字符来实现这一点,这样*
在使用数字之前必须停止:
sed 's/.*[^0-9.]\([0-9.]\+\)/\1/g'
当然,如果您知道所需的数字将紧跟在
-
之后,您可以将[^0-9.]
替换为-
,其工作方式相同。由于*
是贪婪的,因此它将匹配尽可能多的字符。在这种情况下,*
将匹配eta_x2-0.00050
和您组中匹配的最后一个0
通常,这里的答案是使用*?
使用非贪婪匹配,但我认为sed不支持这一点
在开始匹配之前,您应该能够通过要求有一个非数字字符来实现这一点,这样*
在使用数字之前必须停止:
sed 's/.*[^0-9.]\([0-9.]\+\)/\1/g'
当然,如果您知道所需的数字将紧跟在
-
之后,您可以将[^0-9.]
替换为-
,其工作方式相同。由于*
是贪婪的,因此它将匹配尽可能多的字符。在这种情况下,*
将匹配eta_x2-0.00050
和您组中匹配的最后一个0
通常,这里的答案是使用*?
使用非贪婪匹配,但我认为sed不支持这一点
在开始匹配之前,您应该能够通过要求有一个非数字字符来实现这一点,这样*
在使用数字之前必须停止:
sed 's/.*[^0-9.]\([0-9.]\+\)/\1/g'
当然,如果您知道所需的数字将紧跟在
-
之后,您可以将[^0-9.]
替换为-
,其工作方式相同。由于*
是贪婪的,因此它将匹配尽可能多的字符。在这种情况下,*
将匹配eta_x2-0.00050
和您组中匹配的最后一个0
通常,这里的答案是使用*?
使用非贪婪匹配,但我认为sed不支持这一点
在开始匹配之前,您应该能够通过要求有一个非数字字符来实现这一点,这样*
在使用数字之前必须停止:
sed 's/.*[^0-9.]\([0-9.]\+\)/\1/g'
当然,如果您知道所需的数字将紧跟在-
之后,您可以将[^0-9.]
替换为-
,其工作方式相同。不需要sed
find eta* | grep -oP '(?<=-)[\s.]+'
find eta* | cut -d'-' -f 2
查找eta*|grep-oP'(?不需要sed
find eta* | grep -oP '(?<=-)[\s.]+'
find eta* | cut -d'-' -f 2
查找eta*|grep-oP'(?不需要sed
find eta* | grep -oP '(?<=-)[\s.]+'
find eta* | cut -d'-' -f 2
查找eta*|grep-oP'(?不需要sed
find eta* | grep -oP '(?<=-)[\s.]+'
find eta* | cut -d'-' -f 2
查找eta*|grep-oP'(?这应该可以-
find eta* | sed 's/[^-]*-\([0-9]*\.[0-9]*\)/\1/'
这应该是有效的-
find eta* | sed 's/[^-]*-\([0-9]*\.[0-9]*\)/\1/'
这应该是有效的-
find eta* | sed 's/[^-]*-\([0-9]*\.[0-9]*\)/\1/'
这应该是有效的-
find eta* | sed 's/[^-]*-\([0-9]*\.[0-9]*\)/\1/'
感谢F.J.我非常关注结尾部分,为什么它看起来不那么贪婪,我忘记了第一个。这个概念让我在sed中搜索贪婪。事实证明,我可能在寻找的是perl
,它支持非贪婪修饰符,作为奖励,它不需要太多的\转义。此外,perl还有有用的sh或者像\d和\w这样的函数。这样我就可以得到:find eta*| perl-pe的|.*(\d+\.\d+)|\1 |’
。使用sed和perl似乎速度一样快。那么为什么还有人会使用sed呢?感谢F.J。我非常关注结尾部分,为什么它看起来并不贪婪,我忘记了第一个。这个概念让我在sed中搜索greedness。结果是,我可能在寻找的是perl
,它支持n在贪婪修饰符上,作为奖励,不需要太多的转义。此外,perl还有有用的速记,如\d和\w。因此,我可以使用这些速记:find eta*| perl-pe的|*(\d+\.\d+)|\1 |’
。使用sed和perl似乎速度一样快。那么为什么还有人会使用sed呢?感谢F.J。我非常关注结尾部分,为什么它看起来并不贪婪,我忘记了第一个。这个概念让我在sed中搜索greedness。结果是,我可能在寻找的是perl
,它支持n在贪婪修饰符上,作为奖励,不需要太多的转义。此外,perl还有有用的速记,如\d和\w。因此,我可以使用这些速记:find eta*| perl-pe的|*(\d+\.\d+)|\1 |’
。使用sed和perl似乎速度一样快。那么为什么还有人会使用sed呢?感谢F.J。我非常关注结尾部分,为什么它看起来并不贪婪,我忘记了第一个。这个概念让我在sed中搜索greedness。结果是,我可能在寻找的是perl
,它支持n在贪婪修饰符上,作为奖励,不需要太多的转义。另外,perl有有用的速记,如\d和\w。因此,我可以得到:find eta*| perl-pe's |*(\d+.\d+)\124;\ 1 |
。使用,sed和perl似乎同样快。