如何 grep -o 嵌套方括号和字符

问题描述 投票:0回答:1

我下面有一个字符串存储在文件中aaa

333333444444aaa[aaa[[bb[b[ccc]zzz]xx[x]cc]]cc222222211111111

字符串中左右方括号可能不匹配。所以我想将所有小写字母和方括号作为字符串进行 grep 。我正在使用

grep -o '[a-z\[\]]*' aaa
来了解下面的整体。

aaa[aaa[[bb[b[ccc]zzz]xx[x]cc]]cc

但它返回 3 种模式,分别是 单个小写字母单个左方括号单个小写字母右侧有一个或多个右方括号

所以我尝试了

grep -o '[a-z\[]*' aaa
。它返回 2 个模式,分别是 带左方括号的小写字母小写字母。这更接近我想要的结果,但仍然不正确。

是否可以仅使用

grep -o
方括号匹配来得到预期的结果?

regex linux grep pattern-matching
1个回答
0
投票

使用 grep 走在正确的轨道上,但正如您所注意到的,单独使用 grep 很难匹配平衡方括号,因为它不支持递归模式或平衡逻辑。

但是,您可以使用这种方法来更接近您想要的结果:

grep -o '^[a-z\[\]]*' aaa

说明: ^[a-z[]]* 匹配从行首到第一个不匹配字符(如数字)的任何小写字母和方括号序列。 -o 标志使 grep 仅打印每行的匹配部分,因此它将输出接近您要查找的内容。 使用此模式,您应该得到:

aaa[aaa[[bb[b[ccc]zzz]xx[x]cc]]cc

此解决方案无法处理完美平衡的括号(为此,您需要更高级的工具,如 awk 或脚本语言,如 Python)。但如果您只需要捕获第一个小写字母和括号序列,那么这应该很有效!

© www.soinside.com 2019 - 2024. All rights reserved.