You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用grep同时搜索换行符与空字符(适配UTF-16小端场景)

解决UTF-16小端文件中匹配0A 00换行符序列的问题

针对你在批量检查UTF-16小端格式文件时,无法匹配换行符对应的0A 00字节序列的问题,这里有几个可行的解决方案,结合grep和批量处理工具来实现:

方法1:用grep直接匹配字节序列(推荐)

你可以利用grep的Perl正则模式(-P)配合强制文本模式(-a)来直接定位目标字节序列,同时加上递归搜索(-r)来批量处理目录下的所有文件:

grep -r -P -a '\x0A\x00' /path/to/your/target/directory

如果需要匹配一个或多个连续的换行符(也就是0A 00重复出现),只需要把正则改成重复模式:

grep -r -P -a '(\x0A\x00)+' /path/to/your/target/directory

为什么这个命令有效?

  • -r:递归遍历目标目录下的所有文件,满足你批量检查的需求
  • -P:启用Perl正则,支持\xXX格式的十六进制字节匹配
  • -a:强制grep将所有文件视为文本文件,不会跳过被识别为二进制的UTF-16文件
  • \x0A\x00:精确对应UTF-16小端格式中换行符的字节序列

如果上面的命令效果不佳,可以尝试替换-a-U(二进制模式,不转换换行符):

grep -r -P -U '\x0A\x00' /path/to/your/target/directory

方法2:用find+xxd做精确十六进制搜索

如果grep的字节匹配还是有问题,可以借助xxd将文件转换为十六进制字符串,再进行搜索,适合更精准的字节级匹配:

find /path/to/your/target/directory -type f -exec sh -c 'xxd -p "$1" | grep -q "0a00"' _ {} \; -print

命令解释:

  • find:遍历目标目录下的所有普通文件(-type f
  • xxd -p:将文件内容转换为无格式的纯十六进制字符串(默认小写,所以搜索0a00
  • grep -q:静默搜索,找到匹配内容就返回成功
  • -print:当文件匹配时,打印文件名

如果要匹配多个连续换行符,把grep -q "0a00"改成grep -q "0a00\{1,\}"即可。

内容的提问来源于stack exchange,提问作者user7394862

火山引擎 最新活动