我有一个凌乱的文本文件(由于内容的性质我无法粘贴它。)
在文件中我想匹配unnested括号中的内容。
以下是包含问题的示例:
a(b()c((d)e)f()g)h(i)
我需要的输出是:
(b()c((d)e)f()g)(i)
(基本上是最大括号中的所有内容,少于'a'和'h')
同样我无法发布实际内容,但上面的例子说明了我在原始文件中遇到的问题。
我正在从bash工作,我熟悉sed,grep,但不幸的是没有awk。 感谢
答案 0 :(得分:3)
由于正则表达式会找到最长的匹配,因此您可以使用
\(.*\)
如果您关心嵌套并希望找到最外层,例如对于((a)) and (b))))
您要查找((a))
和(b)
,那么这是您在技术上无法与正则表达式匹配的典型语法示例。
但是,因为您标记了帖子PCRE:
grep -P -o '(?xs)(?(DEFINE) (?<c>([^()]|(?&p))) (?<p>\((?&c)*\)))((?&p))'
答案 1 :(得分:0)
(?x)
(?(DEFINE)(?<nest>(\((?:[^()]*(?1)?[^()]*)\))))
\((?:[^()]*(?&nest)?[^()]*)*\)
当然需要将其展平到grep
行。