问题是:我有一个名为brain.txt的文档,带有(brainfuck)代码的行:
++++++++++[>++++++++>++++++>+<<<-]>+++.>+++++.<-.+.>>. word
最后,word
确实可以是任何单词。我如何从文档中过滤线的每一个序列的长度&lt的长度;>不平坦?
我写了以下命令:
egrep -v '^(([^<]*(<<)*[^<]*)|([^>]*(>>)*[^>]*))*$' brain.txt
但似乎不起作用,有人可以向我解释一下此命令是什么不正确的?
编辑:如卡罗利·霍瓦斯(Karoly Horvath)所提到的那样,我没有否定偶数偶尔,而是使用正则表达式与不均匀的情况匹配。所以我写了以下命令:
egrep '^(([^<]*<(<<)*[^<]*)|([^>]*>(>>)*[^>]*))*$' brain.txt
,但由于某种原因,我仍然符合线。
您的正则表达式匹配的每一行,其中每个的序列&lt的序列;和>是偶数。
如果否定了它,则将打印其余的行 - 包含至少一个不均匀的序列。
另一个问题是[^<]
可以吃>
。
不要否定,只需搜索不平衡:
grep -P '^(([^<>]*)|((<<)*<(?!<))|((>>)*>(?!>)))*$'