我下面有一个字符串存储在文件中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
和方括号匹配来得到预期的结果?
使用 grep 走在正确的轨道上,但正如您所注意到的,单独使用 grep 很难匹配平衡方括号,因为它不支持递归模式或平衡逻辑。
但是,您可以使用这种方法来更接近您想要的结果:
grep -o '^[a-z\[\]]*' aaa
说明: ^[a-z[]]* 匹配从行首到第一个不匹配字符(如数字)的任何小写字母和方括号序列。 -o 标志使 grep 仅打印每行的匹配部分,因此它将输出接近您要查找的内容。 使用此模式,您应该得到:
aaa[aaa[[bb[b[ccc]zzz]xx[x]cc]]cc
此解决方案无法处理完美平衡的括号(为此,您需要更高级的工具,如 awk 或脚本语言,如 Python)。但如果您只需要捕获第一个小写字母和括号序列,那么这应该很有效!