sed:匹配一个词前的一组数字

sed: match a group of digits before a word

我正在尝试从以下行中提取数字:

<foo> 34Kb data <foo>
<foo> 2Kb data <foo>

我也在提取其他参数,所以匹配 Kb data 之前的数字组很重要,最好使用 sed

我试过:

sed -r 's/.*([0-9]+)Kb data.*//'

和其他组合,但他们只给了我一组数字的最后一位。

谢谢!

这是因为你的*贪心operator.Butsed不支持*?非贪心operator.so而是使用grep -P

grep -P '.*?([0-9]+)Kb data.*'

grep -P '\d+(?=Kb)'

simply.See 演示。

https://regex101.com/r/oL9kE8/13

sed -r 's/[^0-9]*([0-9]+)Kb data.*//'

您可以使用

sed -r 's/.*\b([0-9]+).*//'

\b 匹配单词边界(单词的开头或结尾)。

这是一种方法:

awk -F"[^0-9]" '{=}1' file
      34
      2