结果:

结果:

如何 grep 非连续模式...

我运行这个命令。

grep -B 1 -A 2 "field-2-value" inputFile.txt |grep -v "field-3"

产生这 4 个输出。

  [字段-1]xxx[/字段-1]
  [字段 2]字段 2 值[/字段 2]
  [field-5]true[/field-5]
  --
  [field-1]yyy[/field-1]
  [字段 2]字段 2 值[/字段 2]
  [字段 4]字段 4 值[/字段 4]
  --
  [field-1]zzz[/field-1]
  [字段 2]字段 2 值[/字段 2]
  [field-5]假[/field-5]
  --
  [field-1]嗯[/field-1]
  [字段 2]字段 2 值[/字段 2]
  [字段 4]字段 4 值[/字段 4]

我只对具有 field-2 和 field-4 值的第二个和最后一个结果感兴趣:

 
  [field-1]yyy[/field-1]
  [字段 2]字段 2 值[/字段 2]
  [字段 4]字段 4 值[/字段 4]

  [field-1]嗯[/field-1]
  [字段 2]字段 2 值[/字段 2]
  [字段 4]字段 4 值[/字段 4]

inputFile.txt 如下所示:

[记录 ID=“1”]
  [字段-1]xxx[/字段-1]
  [字段 2]字段 2 值[/字段 2]
  [field-3]你好[/field-3]
  [field-5]true[/field-5]
[/记录]
[记录 ID=“2”]
  [field-1]yyy[/field-1]
  [字段 2]字段 2 值[/字段 2]
  [field-3]你好[/field-3]
  [字段 4]字段 4 值[/字段 4]
[/记录]
[记录 ID=“3”]
  [field-1]zzz[/field-1]
  [字段 2]字段 2 值[/字段 2]
  [field-3]你好[/field-3]
  [field-5]假[/field-5]
[/记录]
[记录 ID=“4”]
  [field-1]嗯[/field-1]
  [字段 2]字段 2 值[/字段 2]
  [field-3]你好[/field-3]
  [字段 4]字段 4 值[/字段 4]
[/记录]

我几乎想编写一个 shell 脚本来运行两组操作:首先为包含这些结果的每个文件生成一个具有这些输出的文件。然后删除没有字段 4 的行块。帮助!

答案1

sed -ne '
   /field-2-value/!{h;d;}
   H;n;n;/field-4/!d;H;g;s/$/\n/p
' inputFile.txt

我们拒绝所有不包含 /field-2/ 的行,但将它们存储在保留中。 (只有最后一个可以保存)

因此,当我们看到/field-2/行时,我们将其附加到hold,跳过下一行,然后检查下一行是否包含/field-4/。如果没有,我们将其放在 OTW 中,然后将其附加到保留中,然后在添加尾随换行符后将保留移出并打印它,以便分离出打印的记录。


结果:

  [field-1]yyy[/field-1]
  [field-2]field-2-value[/field-2]
  [field-4]field-4-value[/field-4]

  [field-1]mmm[/field-1]
  [field-2]field-2-value[/field-2]
  [field-4]field-4-value[/field-4]

相关内容