具有正负过滤的多行grep

凯尔·查利斯(Kyle Challis)

我需要到grep应该是一个多行字符串包括一个字符串,但包括其他人。这是我在一些HTML文件中搜索的内容:

<not-this>
   <this> . . . </this>
</not-this>

换句话说,我想查找包含<this></this>在同一行中的文件,但不应<not-this>在之前和/或之后的行中用html标记包围这是我想做的一些速记逻辑:

grep 'this' && '/this' && !('not-this')

我已经看到以下问题的答案...

grep -Er -C 2 '.*this.*this.*' . | grep -Ev 'not-this'

...但是这只会删除包含“ not”部分的行,并显示其他行。我想要的是,如果在“ this”的一两行中没有找到“ not-this”,则根本不提取这些结果。

有没有办法做到这一点?

PS我正在使用Ubuntu和gnome-terminal。

迈克·霍尔特(Mike Holt)

听起来awk脚本可以在这里更好地工作:

$ cat input.txt
<not-this>
   <this>BAD! DO NOT PRINT!</this>
</not-this>

<yes-this>
   <this>YES! PRINT ME!</this>
</yes-this>


$ cat not-this.awk
BEGIN {
  notThis=0
}

/<not-this>/        {notThis=1}
/<\/not-this>/      {notThis=0}
/<this>.*<\/this>/  {if (notThis==0) print}

$ awk -f not-this.awk input.txt
   <this>YES! PRINT ME!</this>

或者,如果您愿意,可以将此awk脚本压缩到一长行中:

$ awk 'BEGIN {notThis=0} /<not-this>/ {notThis=1} /<\/not-this>/ {notThis=0} /<this>.*<\/this>/ {if (notThis==0) print}' input.txt

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有跨多行参数的Javascript函数

来自分类Dev

HorizontalScrollView中具有多行的Android LinearLayout

来自分类Dev

AutoHotKey:具有多行输入的InputBox

来自分类Dev

Postgres消除具有相同ID的多行

来自分类Dev

jQuery获取具有最多行的表

来自分类Dev

在多行中包含具有行号的列

来自分类Dev

具有多行相同的表格

来自分类Dev

创建具有多行条件的列

来自分类Dev

具有pg-promise的多行插入

来自分类Dev

具有多行布局的Listview

来自分类Dev

合并具有重复ID的多行

来自分类Dev

角度grep或过滤器,以获取具有ID的对象

来自分类Dev

连接具有多行的2个表

来自分类Dev

具有OR逻辑的Grep命令

来自分类Dev

具有相同fk的多行至列

来自分类Dev

具有正负重要项数的横截面回归表输出

来自分类Dev

插入具有不同列名的多行

来自分类Dev

创建具有多行条件的列

来自分类Dev

具有多行的HTML标头

来自分类Dev

具有正负值的3类数据挖掘算法选择

来自分类Dev

选择具有最大日期的多行

来自分类Dev

检查TextBlock是否具有多行

来自分类Dev

具有多行和Grep的Bash脚本

来自分类Dev

grep-组合正负表达式

来自分类Dev

具有多行布局的Listview

来自分类Dev

具有多行的滑块组件

来自分类Dev

具有多行的UICollectionView

来自分类Dev

轮盘赌轮盘选择具有最小化的正负适应度值

来自分类Dev

如何使用 awk、grep 和/或 powershell 过滤多行