grep排除在句子上[字符

时间:2013-10-29 10:22:52

标签: linux unix grep

我需要做一个grep,它排除包含'这是一个句子[WARN]'的句子,例如:

  

aaaabbbbcccc这是一句话[WARN] ccccdddd

但是当我这样做时:

  

grep WARN log / * | grep -v -E'这是一个句子[WARN]'

它不起作用。我认为这是因为“[”和“]”因为如果我这样做:

  

grep WARN log / * | grep -v -E'这是一个句子'

它有效。如何排除包含方括号的句子?

修改

对不起,我应该说 - 字符串实际上是一个子字符串。所以我可能有:

  

aaaabbbbcccc这是一句话[WARN] ccccdddd

需要排除。

2 个答案:

答案 0 :(得分:2)

-E用于扩展正则表达式。只是逃避[]括号,你应该很好。

grep WARN log/* | grep -v -E 'This is a sentence \[WARN\]'

[]括号表示未转义时的字符类,因此您的模式实际需要的是以下子字符串之一:

  • 这是一句W
  • 这是一个句子A
  • 这是句子R
  • 这是一句N

答案 1 :(得分:1)

你需要告诉grep将字符串用作固定字符串。为此,您可以使用-F

grep WARN log/* | grep -v -F 'This is a sentence [WARN]'

来自man grep

  

-F, - 固定字符串

     

将PATTERN解释为固定字符串列表,以换行符分隔,   其中任何一个都要匹配。 (-F由POSIX指定。)

测试

$ cat a
This is a sentence [LOG]
This is a sentence [WARN]
$ grep -v "sentence [LOG]" a   <---- [LOG] is taken as regex
This is a sentence [LOG]
This is a sentence [WARN]
$ grep -Fv "sentence [LOG]" a   <---- [LOG] is taken literally
This is a sentence [WARN]

或使用更新的输入:

$ cat a
aaaabbbbccccThis is a sentence [WARN]ccccdddd
aaaabbbbccccThis is a sentence [LOG]ccccdddd
hello!
$ grep -vF "sentence [WARN]" a
aaaabbbbccccThis is a sentence [LOG]ccccdddd
hello!