我想在正则表达式的字符类中匹配这些字符:[ ] ( ),我该怎么做?
echo 'some text (some text in parenthesis) [some other in brackets]' | grep '[\[\]\(\)]'
这个与任何字符都不匹配。
你可以这样使用它:
echo 'some text (some text in paranthesis) [some other in brackets]' |
grep -o '[][()]'
(
)
[
]
请注意:
]
和 [
放置在方括号表达式中打开 [
之后,那么它们将被视为文字 ]
或 [
。^
,位于第一个位置,用于在 ]
或 [
(
和 )
。仅供参考:
grep
文档,第3.2字符类和括号表达式节:
大多数元字符在括号表达式中失去了其特殊含义。
‘]’
如果它不是第一个列表项,则结束括号表达式。所以,如果你想让‘]’字符成为列表项,你必须把它放在第一位。
此外,您还可以看到
(
、[
和 )
在括号表达式中并不特殊。
由于
]
括号表达式模式中的
'[\[\]\(\)]'
不是第一个字符,因此它结束模式,下一个 ]
创建了一个不完整的括号表达式。
最常见的方法是在字符前放置 \,但奇怪的是,这似乎不适用于 grep 中的 ]。
如果您可以使用 Perl,请执行以下操作:
% cat yourfile.txt | perl -ne 'print if(/[\[\]\(\)]/);';