2012-04-05 56 views
7

使用以下示例,我需要仅过滤掉包含'ABC'的行,同时忽略包含方括号的匹配'ABC'的行:需要RegExp帮助Linux Bash grep命令过滤掉包含方括号的行

 
2012-04-04 04:13:48,760~sample1~ABC[TLE 5332.233 2/13/2032 3320392]:CAST 
2012-04-04 04:13:48,761~sample2~ABC 
2012-04-04 04:13:48,761~sample3~XYZ[BAC.CAD.ABC.CLONE 232511]:TEST 

这里是我有什么,但到目前为止,我无法成功地过滤掉方括号中的台词:

bash-3.00$ cat Metrics.log | grep -e '[^\[\]]' | grep -i 'ABC'

请帮助?

+0

1为样本输入,所期望的输出的明确的解释和一些样本码!祝你好运。 – shellter 2012-04-05 14:01:59

回答

3

被修改基于评论:

尝试grep -i 'ABC' Metrics.log | grep -v "[[]" | grep -v "ABC\w"

输入:

2012-04-04 04:13:48,760~sample1~ABC[TLE 5332.233 2/13/2032 3320392]:CAST 
2012-04-04 04:13:48,761~sample2~ABC 
2012-04-04 04:13:48,761~sample3~XYZ[BAC.CAD.ABC.CLONE 232511]:TEST 
2012-04-04 04:13:48,761~sample4~XYZ 
2012-04-04 04:13:48,761~sample5~ABCD 
2012-04-04 04:13:48,761~sample6~ABC:TEST 

输出:

2012-04-04 04:13:48,761~sample2~ABC 
2012-04-04 04:13:48,761~sample6~ABC:TEST 
+1

如果它适合你,你会介意标记答案是正确的吗?谢谢! – GetSet 2012-04-05 14:18:38

+0

请注意,不需要cat Metrics.log,只需将它作为第一个'grep的输入。 grep -i'ABC'Metrics.log | grep -v“[[]”' – matchew 2012-04-05 14:32:36

+0

谢谢。标记为已回答。注意到这只猫。还有一种情况:需要跳过错误匹配,如ABCD,但不要ABC:TEST。 – 2012-04-05 15:27:55

1
$cat log | grep -v '\[.*\]' | grep ABC 
+0

这也适用。谢谢 – 2012-04-05 15:31:06