grep多行匹配以及一些问题

测试文本, 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

你可能感兴趣的:(linux)