我试图从响应中删除"数据包号码624不匹配",所以显而易见的是尝试
cat somefile.txt | grep -v "Packet number \d+ doesn't match"
Run Code Online (Sandbox Code Playgroud)
如果我删除了-v,只是为了测试,那么它什么都不返回.所以也许命令行正在使用\d或+首先执行某些操作.所以我尝试了各种组合,比如\\d+ \\d\+ \\\\d+ \\\\d\+ [0-9]+ [0-9]\+.答对了!!最后一个有效.有人能解释一下这里发生了什么吗?如果这被命令行修改,为什么echo "\d+"还会返回\d+?
默认情况下,grep使用基本正则表达式和\dis(PCRE)语法.它不受支持,因此您需要使用([0-9])或([[:digit:]])代替,或者使用grep with option-P
为什么不起作用[0-9]+?
+失去了意义,需要被转义.您可以使用以下方法之一解决此问题:
grep -v "Packet number [0-9]\+ doesn't match"
Run Code Online (Sandbox Code Playgroud)
要么
grep -v "Packet number [[:digit:]]\+ doesn't match"
Run Code Online (Sandbox Code Playgroud)