egrep正则表达式操作无法按预期工作

时间:2016-04-19 10:28:38

标签: regex linux bash grep

我有一个内容如下的文件:

[TEXT_ID=2]
[TEXT_REV=3]
[NO_OF_BYTES=16]
0010002$%!003000040000000010100
[TXT]
FF FF
[TXT_ID=2$@]
[TXT_REV=3]
[NO_OF_BYTES=17]
0010002003000040000000010100
 [TXT]
 FF FF
$%^&

我想识别0-9a-zA-Z空间 Enter 标签以外的任何内容作为垃圾角色。

但我必须确保=[]作为[CONTEXT=val]行的一部分时,才会是有效字符。但是,如果它出现在任何其他行,那么将是一个垃圾角色。

例如,在我的文件的第9行,如果有任何=[],它就是垃圾:

0010002003000040000000010100=[

所以我使用以下内容:

egrep -v "^[' '0-9a-zA-Z\t\n\v\f\r]*$|^[ ]*\[[A-Z].*\_*[A-Z]*=*[0-9]*\][ ]*$" SSPR.240, which gives an output as:

0010002$%!003000040000000010100
$%^&

然而,它没有考虑这条线:

[TXT_ID=2$@]

如何修改egrep声明?

1 个答案:

答案 0 :(得分:1)

您可以尝试以下内容:

 egrep -v '^([[:space:]]*\[[[:alnum:]_]+=?[[:alnum:]_]*][[:space:]]*|[[:alnum:][:space:]_]*)$' file