测试文本, a.txt
123
456
789
这里是简单的文本
使用grep多行匹配
grep -Pzo "123\s456" a.txt
-P
: 启用Perl正则表达式模式。
-z
: 允许多行匹配,即使匹配跨越了换行符的行。
-o
: 只输出匹配的部分。
这里能匹配到
123
456
但是有的时候也匹配不到,为什么呢
使用xxd查看
xxd a.txt
使用xxd可以看到二进制下的文本内容
如果此时中间有0a那么就是导致匹配不上的原因
\s
无法匹配这个 0a
按理来说 0a
代表 \r
,\s
是能够匹配的
有0a的情况下匹配多行文本
grep -Pzo "123\x0a\s456" a.txt
这里加上了这个 0a
进行匹配
有没有大佬可以解释下为啥 \s
匹配不了 0a