複数行を含むファイルがあります。次のパターンを含む行を探しています。
\[.*<.*>.*\]
つまり、<something>
[]の間の行が必要です。例は次のとおりです。
Line with [ <matching>|<pattern>]
A line <that> does[not]<match>[]
But [this[<should>]be matched] too
[match [me] <buddy>]
<>の間に許可される唯一の文字は英数字と下線です。
上記の正規表現と怠惰なバージョンを試しましたが、うまくいかないようです。正しい正規表現は何ですか?
ベストアンサー1
[
、]
ペアが常に一致し、交差しておらず、その[...]
オプションをサポートしている<...>
場合(PCREサポートでビルドするときにGNUが行うように)、次のことができます。grep
-P
grep
grep -P '>(?!((?:[^]]|\[(?1)\])*)$)'
つまり、>
次を探しています。いいえその後、一致する[...]
ペアだけが出ます。 PCREの再帰的一致メカニズムを使用してください(?1)
。