IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 4、Linux:如何在zip压缩文件中搜索指定内容 -> 正文阅读

[系统运维]4、Linux:如何在zip压缩文件中搜索指定内容

我们知道,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.txt

echo "belive myself" >test2.txt
echo "come on" >>test2.txt
echo "yesyesyes" >>test2.txt

echo "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 压缩文件中查找指定字符串内容,需要耐心等待!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:10:24  更:2022-07-03 11:13:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:38:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码