首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印所有不包含字符串和相邻线条的线条?

如何打印所有不包含字符串和相邻线条的线条?
EN

Unix & Linux用户
提问于 2013-11-18 03:19:33
回答 2查看 2.3K关注 0票数 4

我正试着把我的注意力集中在这个任务上。我希望从下面的输出中排除包含Auto-installed: 1和前面的2行的所有行。我天真地以为grep -v -B2 string会解决这个问题.不用说,这只会让情况更糟。

以下是内容:

代码语言:javascript
复制
Package: libopencore-amrwb0
Architecture: amd64
Auto-Installed: 1

Package: transfig
Architecture: amd64
Auto-Installed: 0

Package: xfig-libs
Architecture: amd64
Auto-Installed: 1

Package: xaw3dg
Architecture: amd64
Auto-Installed: 0

结果是这样的:

代码语言:javascript
复制
Package: transfig
Architecture: amd64
Auto-Installed: 0

Package: xaw3dg
Architecture: amd64
Auto-Installed: 0

(注意,空行不显示,如果不显示空行是一个加号,但不是必需的,结果也应该包括自动安装值为0的包)

我知道我可以匹配线断线,但是要么不打印任何东西,要么打印所有的东西,但行之间会中断。

任何解决方案都是可以接受的,它不必是grep (它甚至可以是emacs)。

EN

回答 2

Unix & Linux用户

发布于 2013-11-18 15:40:10

以下是必修的Perl方法:

代码语言:javascript
复制
perl -000ne 'print unless /Auto-Installed: 1/' file

神奇的是-000,这就打开了Perl的段落模式,这使得它将文件分割成段落。换句话说,记录由两个或多个连续的\n字符分隔。

这还会打印条目之间的空行,为了去掉这些,您可以运行

代码语言:javascript
复制
perl -000ne 'print unless /Auto-Installed: 1/' file | grep .
票数 2
EN

Unix & Linux用户

发布于 2013-11-19 00:00:51

实际上,您拥有的是用空行分隔的记录。与其编写一些依赖于行的顺序和数量的易碎解析,不如使用awk或perl这样的工具来处理由空行分隔的记录(段落模式)。

代码语言:javascript
复制
awk -F '' '! /^Auto-Installed: 1$/'
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/101572

复制
相关文章

相似问题

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