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
我正在尝试从以下行中提取数字:
<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