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

时间:2015-02-20 11:03:51

标签: regex sed

我试图从以下行中提取数字:

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

我也在提取其他参数,因此在Kb data之前匹配数字组并最好使用sed非常重要。

我试过了:

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

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

谢谢!

3 个答案:

答案 0 :(得分:4)

您可以使用

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

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

答案 1 :(得分:3)

这是因为你的*贪婪的运算符。但是sed不支持*?非贪婪的operator.so而是使用grep -P

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

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

简单。参见演示。

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

或者

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

答案 2 :(得分:1)

这是一种方法:

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