如何 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]