如何不包括某些不。输出中的模式?

时间:2018-01-17 09:54:03

标签: bash shell grep pattern-matching

我有一个命令 -

some command | egrep -i "($query_value)"

返回类似 -

的行
> 2018-01-12 23:17:05.097 Info: Deleted 6 MB at 1129 MB/sec
> /Meters/00002c97 2018-01-12 23:17:05.104 Info: Deleted 6 MB at 864
> MB/sec /Meters/00002c99 2018-01-12 23:26:00.751 Info: Saving
> /Meters/00002c9a 2018-01-12 23:26:01.235 Info: Saved 6 MB at 12 MB/sec
> to /Meters/00002c9a 2018-01-12 23:26:01.268 Info: Merging 12 MB from
> /Meters/00002c9b and /Meters/00002c9a to /Meters/00002c9d,
> timestamp=15158205609400820 2018-01-12 23:26:04.248 Info: Deleted 9 MB
> at 3898 MB/sec /Meters/00002c9b 2018-01-12 23:26:04.250 Info: Deleted
> 6 MB at 2973 MB/sec /Meters/00002c9a 2018-01-12 23:34:01.420 Info:
> Saving /Meters/00002c9c 2018-01-12 23:34:02.192 Info: Saved 6 MB in 1
> sec at 8 MB/sec to /Meters/00002c9c 2018-01-12 23:34:02.248 Info:
> Merging 44 MB from /Meters/00002c98, /Meters/00002c9d, and
> /Meters/00002c9c to /Meters/00002c9f, timestamp=15158210419400730
> 2018-01-12 23:34:07.173 Info: Deleted 35 MB at 9431 MB/sec
> /Meters/00002c98 2018-01-12 23:34:07.175 Info: Deleted 12 MB at 6633
> MB/sec /Meters/00002c9d 2018-01-12 23:34:07.177 Info: Deleted 6 MB at
> 2869 MB/sec /Meters/00002c9c 2018-01-12 23:42:00.842 Info: Saving
> /Meters/00002c9e 2018-01-12 23:42:01.323 Info: Saved 6 MB at 12 MB/sec
> to /Meters/00002c9e 2018-01-12 23:51:00.951 Info: Saving
> /Meters/00002ca0 2018-01-12 23:51:01.680 Info: Saved 6 MB in 1 sec at
> 8 MB/sec to /Meters/00002ca0 2018-01-12 23:51:01.684 Info: Merging 10
> MB from /Meters/00002c9e and /Meters/00002ca0 to /Meters/00002ca2,
> timestamp=15158220605927080 2018-01-12 23:51:05.083 Info: Deleted 6 MB
> at 2127 MB/sec /Meters/00002c9e 2018-01-12 23:51:05.085 Info: Deleted
> 6 MB at 2933 MB/sec /Meters/00002ca0 2018-01-12 23:58:01.110 Info:
> Saving /Meters/00002ca1 2018-01-12 23:58:02.011 Info: Saved 6 MB in 1
> sec at 7 MB/sec to /Meters/00002ca1 2018-01-12 23:58:02.017 Info:
> Merging 12 MB from /Meters/00002ca2 and /Meters/00002ca1 to
> /Meters/00002ca4, timestamp=15158224804450160 2018-01-12 23:58:05.096
> Info: Deleted 9 MB at 419 MB/sec /Meters/00002ca2 2018-01-12
> 23:58:05.105 Info: Deleted 6 MB at 668 MB/sec /Meters/00002ca1

但我想进一步排除包含merging*mb*from|merged*mb*from等模式的行。我不想要像 -

这样的行
Merging 12 MB from or Merged 12 MB from .  

我尝试使用grep的-v选项,但似乎不理解区分大小写和'AND','OR'操作。

2 个答案:

答案 0 :(得分:0)

尝试grep -E(扩展正则表达式)-i(忽略大小写)-v(反转匹配):

grep -E -i -v 'merg(ing|ed).*mb.*from'

如果您认为"忽视案例"很慢,那么:

grep -E -v '[Mm]erg(ing|ed).*[Mm][Bb].*[Ff]rom'

答案 1 :(得分:0)

关注sed可能对您有帮助。

sed -n '/Merging.*MB.*from/d;/Merged.*MB.*from/d;p'   Input_file

OR

sed -n '/[mM]erging.*[mM][bB].*from/d;/Merged.*MB.*from/d;p'  Input_file

编辑: 此处为上述代码添加说明。

sed -n '                 ##-n will STOP printing by default for any line of Input_file till we print it explicitly.
/Merging.*MB.*from/d;    ##Looking for string Merging.*MB.*from and using d will skip it and will NOT print it.
/Merged.*MB.*from/d;     ##Looking for string Merged.*MB.*from and using d will skip it and will not print it.
p                        ##mentioning p will print the lines apart from lines which have above mentioned string in them
' Input_file             ##Mentioning Input_file name here.
相关问题