正则表达式 - 字符类中的括号和括号

时间:2016-05-07 17:37:04

标签: regex grep special-characters

我想匹配这些字符:[]()在正则表达式的字符类中,我该怎么做?

echo 'some text (some text in parenthesis) [some other in brackets]' | grep '[\[\]\(\)]'

这个与任何角色都不匹配。

3 个答案:

答案 0 :(得分:5)

你可以像这样使用它:

echo 'some text (some text in paranthesis) [some other in brackets]' | grep -o '[][()]'

(
)
[
]

您不需要在字符类中转义()。此外,如果您在打开]后立即放置[[,那么您也不需要逃避它们。

答案 1 :(得分:1)

仅供参考:

收到grep documentation, section 3.2 Character Classes and Bracket Expressions

  

大多数元字符在括号表达式中失去了特殊含义。

     

‘]’
  如果它不是第一个列表项,则结束括号表达式。因此,如果您想将']'字符设为列表项,则必须将其放在第一位。

此外,您可以看到([)在括号表达式中不是特殊的。

由于] 括号表达式模式中的'[\[\]\(\)]'不是第一个字符,它会结束模式,而下一个]会创建一个不完整的括号表达式

答案 2 :(得分:0)

最常见的方法是在角色之前放置\,但奇怪的是,这似乎不适用于grep。

如果您可以使用Perl,请执行以下操作:

% cat yourfile.txt | perl -ne 'print if(/[\[\]\(\)]/);';