问题如下: 我有一个名为brain.txt的文档,其中包含(brainfuck)代码行:
++++++++++[>++++++++>++++++>+<<<-]>+++.>+++++.<-.+.>>. word
最后的word
可以是任何单词。
我如何过滤来自文档的行,其中每个序列的长度为&lt;和&gt;是不平衡的?
我写了以下命令:
egrep -v '^(([^<]*(<<)*[^<]*)|([^>]*(>>)*[^>]*))*$' brain.txt
但它似乎没有用,有人能解释一下这个命令的错误吗?
编辑: 正如Karoly Horvath所提到的,我使用正则表达式来匹配不均匀的出现,而不是否定偶数事件。所以我写了以下命令:
egrep '^(([^<]*<(<<)*[^<]*)|([^>]*>(>>)*[^>]*))*$' brain.txt
但由于某些原因,我仍然匹配偶数行。
答案 0 :(得分:0)
你的正则表达式匹配 每个序列长度的每一行。和&gt;是甚至。
如果你否定它,你将打印其余的行 - 包含至少一个不均匀序列的行。
另一个问题是[^<]
可以吃>
。
不要否定,只是寻找不平衡:
grep -P '^(([^<>]*)|((<<)*<(?!<))|((>>)*>(?!>)))*$'