我试图从以下行中提取数字:
<foo> 34Kb data <foo>
<foo> 2Kb data <foo>
我也在提取其他参数,因此在Kb data
之前匹配数字组并最好使用sed
非常重要。
我试过了:
sed -r 's/.*([0-9]+)Kb data.*/\1/'
和其他组合,但他们只给了我一组数字的最后一位数。
谢谢!
答案 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