regex - brackets and parenthesis in character-class

ぃ、小莉子 提交于 2019-12-06 09:28:05

You can use it like this:

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

(
)
[
]

You don't need to escape ( and ) inside a character class. Moreover if you place ] and [ right after opening [ then you don't need to escape them either.

Just FYI:

Accoding to the grep documentation, section 3.2 Character Classes and Bracket Expressions:

Most meta-characters lose their special meaning inside bracket expressions.

‘]’
ends the bracket expression if it’s not the first list item. So, if you want to make the ‘]’ character a list item, you must put it first.

Also, you can see that (, [ and ) are not special in the bracket expressions.

Since ] in your '[\[\]\(\)]' bracket expression pattern is not the first character, it ends the pattern, and the next ] created an incomplete bracket expression.

The most common way is to put a \ before the character, but oddly enough that doesn't seem to work for ] with grep.

If you can use Perl, do this:

% cat yourfile.txt | perl -ne 'print if(/[\[\]\(\)]/);';
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!