正则表达式提取数字

时间:2014-10-05 06:48:18

标签: regex

我已登录以下格式,我正在尝试通过以下命令从行中提取2394528 并且它没有撤回任何结果

 0140928.log:2014/09/28 06:45:00,911 Info   CS Traffic: secureserver ABC:  2394528 / 000 

 20140928.log:2014/09/28 07:00:00,910 Info   CS Traffic: secureserver ABC:  2397206 / 000 

命令:

grep ":\s\+(.{7}\d+)\s+/" 20140928.log. 

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

你可以这样做:

/\d+(?=\s\/)/g

DEMO如果您想要一次匹配,请移除g修饰符。

答案 1 :(得分:0)

使用-o-P参数尝试以下grep命令。

grep -oP ':\s+\K\d{7}(?=\s+\/)' file

如果数字长度不同,请尝试以下方法。

grep -oP ':\s+\K\d+(?=\s+\/)' file

答案 2 :(得分:0)

使用sed,您可以按照以下方式执行此操作:

sed 's~^.*: *\([0-9]*\) /.*$~\1~' file
2394528
2397206

sed正则表达式匹配从开始到:<space>的所有内容,然后捕获后面引用变量\1中接下来的数字,然后匹配到结尾。在替换中,它使用后向引用\1来输出数字。