文件太大了,几十个 G, grep 搞不定,怎么办?没关系,使用 dd 工具:
dd命令:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。默认从标准输入拷贝到标准输出。
部分相关参数:
1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。
2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。
3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
4. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
5. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
查看某个文件的大小 命令1.ls -lh file 2.du -h file
dd if=model_20200423155728 bs=1024 skip=3600000 count=1200 | grep '4222019284714124'
使用二分法找到了“4222019284714124”!关于 dd+grep 的用法,总结了几点:
-
每次从文件开头先跳过 skip*bs 大小的内容,复制 count*bs 大小的内容过来用 grep 查询。
-
如果不设置 count,就会查找跳过后剩余的整个文件,如果查到,则会有输出;否则无。
-
对于特别大的文件,可以不设置skip先把 count 设为一半文件大小的值,采用二分法查找。如果找到,则限定在了前半范围,否则在后半部分。使用类似的方法继续查找……
-
如果找到,最后会输出 count*bs 大小的内容