我们知道,Linux 是支持多种的打包技术的,其中包括了 zip 压缩。最近呢,遇到了在 zip 压缩文件中搜索特定的字符串内容的需求。我试图从 grep、sed 及 awk 等命令中尝试实现这种搜索特定字符串的需求,可测试结果不尽人意。折腾了半天发现 Linux 有提供这种命令的,那就是 zipgrep 命令或 zgrep 命令,在此记录一下。

1、准备工作

首先,新建三个测试要用的 txt 文件,test1.txt、test2.txt、test3.txt,我用下面方式创建和追加文本文件的内容:

echo "hello" >test1.txt
echo "very nice" >>test1.txt
echo "lalalala" >>test1.txt
echo "yyds" >>test1.txtecho "belive myself" >test2.txt
echo "come on" >>test2.txt
echo "yesyesyes" >>test2.txtecho "good bye~" >test3.txt

接着,打包成 .zip 格式的压缩包

zip mytest.zip test*.txt

2、zxx系列命令的尝试

经了解,zip 文件也支持使用 zcat、zmore、zless、zgrep/zipgrep 等命令的,动手尝试下:

可以看到,zcat、zmore、zless 这三个命令和 cat、more、less 的用法是相同的。zcat 会查询单个 zip 文件的所有内容,且提示当前的 mytest.zip 还有其他的文件(忽略展示);zmore 仍是按当前一屏内容展示,是支持分页的;zless 也是支持分页展示内容的(请注意,退出分页模式按 q 键即可)。这三个命令明显不是我需要的,那只有 zgrep/zipgrep 命令了。

zipgrep 命令为例,其语法格式如下:

zipgrep [参数选项] [zip文件]

参数选项:

-b 打印匹配行距文件头部的偏移量,以字节为单位
-c 只输出匹配行的数量
-h 查询多文件时不显示文件名
-i 搜索时忽略大小写
-l 只列出符合匹配的文件名,不列出具体的匹配行
-n 列出所有的匹配行,显示行号
-o 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位
-q 禁止输出任何结果,已退出状态表示搜索是否成功
-r 递归搜索
-s 不显示不存在、没有匹配文本的错误信息
-v 显示不包含匹配文本的所有行
-w 匹配整词
-x 匹配整行

动手试试,如下:

# 查找"lala"字符串,并列出所在文件的行号
[xxxxxxxxxx@localhost ~]$ zipgrep -n "lala" mytest.zip
test1.txt:3:lalalala
# 取反
[xxxxxxxxxx@localhost ~]$ zipgrep -v "lala" mytest.zip
test1.txt:hello
test1.txt:very nice
test1.txt:yyds
test2.txt:belive myself
test2.txt:come on
test2.txt:yesyesyes
test3.txt:good bye~

同时,很好奇 zgrep 命令与 zipgrep 命令有什么区别呢?试试就知道了:

# 查找"lala"字符串,并列出所在文件的行号
[xxxxxxxxxx@localhost ~]$ zgrep -n "lala" mytest.zip
3:lalalala
# 取反
[xxxxxxxxxx@localhost ~]$ zgrep -v "lala" mytest.zip
hello
very nice
yyds

果然,还是 zipgrep 命令搜索字符串的效果好些!

3、升级下搜索字符串的难度

实际工作中,服务器上不可能只有一个 zip 文件的,那么我要在多个 zip 文件中查找相同指定的字符串内容该怎么办呢?把 mytest.zip 复制多份,尝试了下面这些查找方式,都是错误的:

# 错误方式1
zipgrep -n "yyds" *.zip
# 错误方式2
zipgrep -n "yyds" mytest.zip jchy.zip xxyz.zip

那只能是有 for 循环实现了,尝试一下:

for i in `ls *.zip`;do zipgrep -n "yyds" $i; done

最后

zipgrep 命令在 zip 压缩文件中查找指定的字符串内容,并通过 for 循环可以实现从多个 zip 压缩文件中查找。但经过实际的测试发现,多个 zip 压缩文件的字符串查找效率还是挺慢的。假设一个 zip 压缩文件有 100w 的数据量,一分钟完成的查找才达到15个左右的 zip 压缩文件。对于上亿数据量的 zip 压缩文件中查找指定字符串内容,需要耐心等待!

4、Linux:如何在zip压缩文件中搜索指定内容相关推荐

  1. 解压特定zip压缩文件中特定文件,Java

    解压特定zip压缩文件中指定文件,Java 有些时候,zip压缩文件特别大动辄几GB,但是只想要其中某一个特定文件,此时就完全没必要把全量文件都解压出来,只需解压指定文件即可. public stat ...

  2. linux文件删除指定内容,Linux bash删除文件中含“指定内容”的行功能示例

    本文实例讲述了Linux bash删除文件中含"指定内容"的行功能.分享给大家供大家参考,具体如下: #!/bin/sh # 功能: 删除文件中含"指定内容"的 ...

  3. linux删除具有指定内容的文件,Linux bash删除文件中含“指定内容”的行功能示例...

    本文实例讲述了Linux bash删除文件中含"指定内容"的行功能.分享给大家供大家参考,具体如下: #!/bin/sh # 功能: 删除文件中含"指定内容"的 ...

  4. Linux 如何在文件中查找指定内容

    一.前言:在Linux系统当中,查找文件里面的指定内容 应该是系统维护.管理当中遇到最常见的.那么下面如何搜索.查找文件当中的内容呢?下面就介绍一下如何在文件中查找指定的内容 查找文件当中的内容,一般 ...

  5. python删除文本中指定内容_Python实现删除文件中含“指定内容”的行示例

    本文实例讲述了Python实现删除文件中含指定内容的行.分享给大家供大家参考,具体如下: #!/bin/env python import shutil,sys,os darray = [ " ...

  6. bash删除文件中含指定内容的行

    #!/bin/sh # 功能: 删除文件中含"指定内容"的行 # 运行方式: ./dline.sh c.log ==> 产生输出文件: c.log0array=(" ...

  7. python删除文件部分内容_Python实现删除文件中含“指定内容”的行示例

    本文实例讲述了Python实现删除文件中含指定内容的行.分享给大家供大家参考,具体如下: #!/bin/env python import shutil, sys, os darray = [ &qu ...

  8. Linux 命令之 zip -- 压缩文件

    文章目录 一.命令介绍 二.常用选项 三.命令示例 (一)压缩指定目录及其包含的内容 (二)压缩指定目录及其包含的内容,并选择压缩效率 一.命令介绍 zip 命令可以将一个或多个文件放入一个压缩存档中 ...

  9. 如何将杂乱无章的txt文件中的指定内容读取到excel中

    目录 一.问题描述 二.解决方案 我们有时会遇到需要从txt文件中选取指定的内容并将其输出到excel文件中,但是总是会遇到种种麻烦,这里把我曾经遇到的,困扰我很久但在同学和网络的帮助下成功输出的例子 ...

最新文章

  1. Kali Linux Web***测试之 WebSploit
  2. 如何体现机器智能和群体智能的关系,2018新版互联网大脑模型绘制
  3. 一次给女朋友转账引发我对分布式事务的思考
  4. ultra96-v2通过网线连接PC传输文件
  5. CentOS安装glibc-2.14
  6. 解决Qt graphis-view框架中,上层图元接收hover事件导致底层图元接收不到的问题
  7. 信息学奥赛一本通(1067:整数的个数)
  8. 【clickhouse】clickhouse 表引擎 之 SummIngMergeTree
  9. python request headers获取_Python爬虫实战—— Request对象之header伪装策略
  10. Java 学习笔记(9)——java常用类
  11. 做过CC1020的苦逼前人告诉你(分拿来)
  12. 面向对象——抽象基类
  13. 五、瞰景Smart3D空三解算
  14. vb.net Listbox控件横轴的进度条问题
  15. 项目需求分析答辩总结(含评审结果)——日不落战队
  16. mysql 参照完整性规则_mysql数据的完整性约束(完整)
  17. Modelsim搭建只有driver的UVM验证平台
  18. 机器学习系列(三)——EM算法
  19. 近代自然科学为啥未诞生在中国----中国文化的欠缺
  20. Understanding parameters:理解参数(Parameter)

热门文章

  1. VUE中:printJS使用,附带JsBarcode条码生成器,网页转图片html2canvas,base64上传保存处理,二维码生成库qrcode,二维码/条码扫描识别,domtoimage
  2. 如何在苹果手机上安装自制的AD证书
  3. Springcloud HRM微服务项目(二)
  4. 毁灭一切还是重塑世界?AI已成为人类故事中心
  5. 研究生博士生都喜欢逛哪些网站?
  6. python基础(##16)
  7. 李沐精读论文:ViT 《An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale》
  8. 部署onlyoffice(node.js版本)之野蛮施工法
  9. 于 HTML5 WebGL 的民航客机飞行监控系统
  10. laravel 事务_【钢结构建筑】gmp建筑师事务所 | 杭州铁路南站