egrep命令不正确

时间:2012-11-01 00:49:40

标签: regex bash grep brainfuck

问题如下: 我有一个名为brain.txt的文档,其中包含(brainfuck)代码行:

++++++++++[>++++++++>++++++>+<<<-]>+++.>+++++.<-.+.>>. word

最后的word可以是任何单词。 我如何过滤来自文档的行,其中每个序列的长度为&lt;和&gt;是不平衡的?

我写了以下命令:

egrep -v '^(([^<]*(<<)*[^<]*)|([^>]*(>>)*[^>]*))*$' brain.txt

但它似乎没有用,有人能解释一下这个命令的错误吗?

编辑: 正如Karoly Horvath所提到的,我使用正则表达式来匹配不均匀的出现,而不是否定偶数事件。所以我写了以下命令:

egrep '^(([^<]*<(<<)*[^<]*)|([^>]*>(>>)*[^>]*))*$' brain.txt

但由于某些原因,我仍然匹配偶数行。

1 个答案:

答案 0 :(得分:0)

你的正则表达式匹配 每个序列长度的每一行。和&gt;是甚至

如果你否定它,你将打印其余的行 - 包含至少一个不均匀序列的行。

另一个问题是[^<]可以吃>

不要否定,只是寻找不平衡:

grep -P '^(([^<>]*)|((<<)*<(?!<))|((>>)*>(?!>)))*$'