正規表現の文字クラスで[]()と一致させたいのですが、どうすればいいですか?regex - 大カッコと文字クラスのかっこ
echo 'some text (some text in parenthesis) [some other in brackets]' | grep '[\[\]\(\)]'
これはいずれの文字にも一致しません。
正規表現の文字クラスで[]()と一致させたいのですが、どうすればいいですか?regex - 大カッコと文字クラスのかっこ
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を使ってはうまくいかないようです。
あなたはPerlを使用することができた場合は、このです:
% cat yourfile.txt | perl -ne 'print if(/[\[\]\(\)]/);';
だけFYI:grep
documentation, section 3.2 Character Classes and Bracket ExpressionsにAccoding
:
ほとんどのメタ文字は、ブラケット表現の内部で、その特別な意味を失います。
‘]’
最初のリスト項目でない場合は、ブラケット式を終了します。したがって、 ']'文字をリスト項目にしたい場合は、最初に配置する必要があります。
また、あなたは(
、[
と)
はブラケット式の中で特別ではないことがわかります。あなたの'[\[\]\(\)]'
ブラケット表現で]
以来
パターンが最初の文字ではない、それはパターンを終了し、次の]
が不完全なブラケット式を作成しました。
詳細な説明をありがとう –
Anubhava:5年半の間に1日あたり9.6の回答。私はあまりにもAOLで仕事をしたい! – sweaver2112
Lol sure on board – anubhava
'[] [()]'は、文字クラスではなく、ブラケット式です。 '[:space:]'は文字クラスなので、大括弧の式に '[[:space:]]'として含めることができます。 –