我有一个文件,内容如下:
[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-9
、a-z
、A-Z
、Space、Enter 和 Tab 作为垃圾字符。
不过,我必须确保 =
或 [
或 ]
作为 [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
语句?
最佳答案
你可以试试这样的:
egrep -v '^([[:space:]]*\[[[:alnum:]_]+=?[[:alnum:]_]*][[:space:]]*|[[:alnum:][:space:]_]*)$' file
关于regex - egrep 正则表达式操作未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36715714/