grep 一系列字符(十进制编码)

grep 一系列字符(十进制编码)

我有一个可接受的字符列表:

!"#$%&'()*+,-./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_

相关内容