我想匹配这些字符:[]()在正则表达式的字符类中,我该怎么做?
echo 'some text (some text in parenthesis) [some other in brackets]' | grep '[\[\]\(\)]'
这个与任何角色都不匹配。
答案 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(/[\[\]\(\)]/);';