문제

The problem is the following: I have a document called brain.txt with lines of (brainfuck) code like this:

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

The word at the end can really be any word. How can i filter the lines from the document where the length of every sequence of < and > is uneven?

I wrote the following command:

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

But it does not seem to work, can anyone explain me what is incorrect about this command please?

EDIT: Instead of negating the even ocurrences, i used regex to match the uneven occurences, as Karoly Horvath mentioned. So I wrote the following command:

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

But for some reason i still match even lines.

도움이 되었습니까?

해결책

Your regex matches every line where the length of every sequence of < and > is even.

If you negate it, you will print the rest of the lines - the ones which contain at least one uneven sequence.

The other problem is [^<] can eat >.

Don't negate, just search for uneven:

grep -P '^(([^<>]*)|((<<)*<(?!<))|((>>)*>(?!>)))*$'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top