首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从压缩文件中获取Bash中行号周围的上下文

从压缩文件中获取Bash中行号周围的上下文
EN

Stack Overflow用户
提问于 2020-03-06 05:19:14
回答 2查看 136关注 0票数 1

我知道可以搜索行号(比方说,第#139656504行)并返回它周围的上下文:

代码语言:javascript
复制
grep -n 139656504 -B 5 -A 5 file.txt

但当我在压缩文件上使用它时,它什么也没有返回:

代码语言:javascript
复制
zgrep -n 139656504 -B 5 -A 5 file.txt.gz

我在macOS Mojave。

有没有办法通过压缩文件来获得这行代码的上下文?

我制作了一个测试文件(test.txt),其中包含:

代码语言:javascript
复制
test1
test2
test3
test4
test5
test6
test7
test8
test9
testBB
test11
test12
test13
test14
test15
test16
test17
test17
test18
test19
test20

压缩文件:

代码语言:javascript
复制
pigz test.txt

现在如果我运行:

代码语言:javascript
复制
zgrep -n 10 -C 5 test.txt.gz

它给了我什么..。(我确保第10行不会有数字10,否则,zgrep将“搜索”10,而不是第10行)

如果第10行是test10而不是testBB,它就可以工作了。但这不是我所期望的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-06 05:28:07

试试这个:

代码语言:javascript
复制
zgrep -n 139656504 -C 5 file.txt.gz

注意:-n表示在输出中显示行号

-C 5表示在满足表达式的每行之前显示5行,在每行之后显示5行。

139656504是您要搜索的模式。

执行man grepman zgrep --看起来所有的命令行开关都适用于这两种情况。

如果您只需要查看特定行的周围行,则可以执行以下操作:

代码语言:javascript
复制
gunzip -c file.txt.gz | sed -n "139656499,139656509p"

这意味着-- gunzip将文件压缩到stdout,这样您就可以通过管道将其导入到sed中,sed是一个令人惊叹的实用程序,这里的sed被告知在139656504之前显示第5行,在第5行之后显示第5行。

票数 1
EN

Stack Overflow用户

发布于 2020-03-06 05:58:39

如果要打印特定行号的内容,可以使用awk

代码语言:javascript
复制
awk -v nr=10 'FNR==nr' file

或带有行号前缀

代码语言:javascript
复制
awk -v nr=10 'FNR==nr{ print FNR":"$0 }' file

或使用5行上下文行

代码语言:javascript
复制
awk -v nr=10 'FNR>=nr-5 && FNR<=nr+5{ print FNR":"$0 }' file

代码语言:javascript
复制
zcat file.gz | awk ...

用于gzipped文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60554091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档