我正试着把我的注意力集中在这个任务上。我希望从下面的输出中排除包含Auto-installed: 1和前面的2行的所有行。我天真地以为grep -v -B2 string会解决这个问题.不用说,这只会让情况更糟。
以下是内容:
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结果是这样的:
Package: transfig
Architecture: amd64
Auto-Installed: 0
Package: xaw3dg
Architecture: amd64
Auto-Installed: 0(注意,空行不显示,如果不显示空行是一个加号,但不是必需的,结果也应该包括自动安装值为0的包)
我知道我可以匹配线断线,但是要么不打印任何东西,要么打印所有的东西,但行之间会中断。
任何解决方案都是可以接受的,它不必是grep (它甚至可以是emacs)。
发布于 2013-11-18 15:40:10
以下是必修的Perl方法:
perl -000ne 'print unless /Auto-Installed: 1/' file神奇的是-000,这就打开了Perl的段落模式,这使得它将文件分割成段落。换句话说,记录由两个或多个连续的\n字符分隔。
这还会打印条目之间的空行,为了去掉这些,您可以运行
perl -000ne 'print unless /Auto-Installed: 1/' file | grep .发布于 2013-11-19 00:00:51
实际上,您拥有的是用空行分隔的记录。与其编写一些依赖于行的顺序和数量的易碎解析,不如使用awk或perl这样的工具来处理由空行分隔的记录(段落模式)。
awk -F '' '! /^Auto-Installed: 1$/'https://unix.stackexchange.com/questions/101572
复制相似问题