2014-02-07 163 views
4

我想在正则表达式中匹配方括号字符以外的字符。如何在grep中的方括号内跳过方括号

正是我想要匹配一些特殊字符和其他一些人不这样做,所以我想将它们指定

# grep $'[^a-zA-Z0-9#\\/:!<>{},=?.()["_+;*\'&|$-]' file 

这缺少],我试图与\]\\]等逃逸,我读过[^]之外的人,但我需要它!

回答

8

^之后立即放置]

下面是一个例子。输入文件 “富” 载:

foo 
[ 
bar 
] 
baz 
quux 

我们执行命令:

grep '[^][]' foo 

输出是:

foo 
bar 
baz 
quux 

从文档上bracket expressions in POSIX regular expressions

的右括号(']')将失去其特殊意义g,并且如果在列表中首先出现,则在括号表达式中表示自己(如果有的话,在初始回调('^')之后)。

和也: ''

的特殊字符, '*', '[' 和 '\'(期间,星号,左支架,和反斜杠,分别地)将失去它们在括号表达式中的特殊含义。

+1

你的表达是正确的,但你的解释不是。大多数正则表达式的实现不会将'\\'识别为集合中的转义字符,因此您必须将']'放在不属于语法部分的某处 - 直接放在'['或'[[ ^'。 –

+0

@GuntramBlohm你是对的。这很有趣,我的手指在那一刻知道该做什么比我的大脑更好。我纠正了解释。 –

+0

是的,它工作,但为什么需要这样?有一个规范? –