我有一个可接受的字符列表:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI
这些字符可以翻译成ASCII 小数范围33-73
我想要的实现将解析输入文件的行,检测超出此范围的任何字符,并返回相应的行。
grep -E '[^33-73]{1,}'
其中-E
用于正则表达式解释,^
用于匹配不在列表中的任何字符,{1,}
用于匹配一个或多个匹配项...并且[33-73]
是一种以十进制格式表示所需字符范围的方法,我不知道如何表达这一点在某种程度上它可以通过 来解释grep
。
(我可以在正则表达式本身中定义字符列表,但是保留grep -E
字符的转义会使表达式难以阅读。)
有没有办法在 中实现这一点grep
? (仅供参考,试图让它发挥作用(BSD grep) 2.5.1-FreeBSD
)
输入示例:
$ cat f1.txt
(ABC123abc_
ABC!123)-
预期输出:
(ABC123abc_
答案1
由于这些是 ASCII 中的连续字符,因此您应该能够简单地执行以下操作:
$ grep '[^!-I]' file
(ABC123abc_
或者,如果您有不同的区域设置,则更安全:
$ LC_ALL=C grep '[^!-I]' file
(ABC123abc_