grep+正则表达式问题-匹配ip地址

为什么第1个表达式匹配不出来ip地址,第2个可以

表达式1:
grep -Eo '\d*.\d*.\d*.\d*' nginx.log | sort | uniq -c | sort -nr | head -n 3

表达式2:
grep -o '^[0-9]*.[0-9]*.[0-9]*.[0-9]*' nginx.log | sort | uniq -c | sort -nr | head -n 3
1 个赞
  • 首先 需要使用\d的话 你需要Perl Regular Expression 添加-P参数来使用这种规则的正则 才能支持\d
  • 其次 你正则中的 . 是转义字符 如果你需要用它的本意 需要写成 .
  • 资料:正则表达式转义字符支持范围

提问记得 标签要选open哈,助教可以一眼看到问题

链接的资料中显示 Basic RegEx 和 Extended RegEx 都是不支持 \s 的,那为什么这个指令 grep ‘\s500\s’ nginx.log 可以正常工作?

表格也不是全都正确 我弄了一份放在交流区了,\s的问题我改了 如果还发现什么问题的话方便随时修正,如果你们有发现表格有什么不对的也可以回帖到那边我会去修改哈