为什么“ grep'[^-〜]'”的行为与“ grep -P -L'[^ [:ascii:]]'”相同?

时间:2019-01-23 19:01:54

标签: bash shell

我已被分配去仅包含ASCII文本的文件。我在网上找到了此代码,但没有得到。

grep '[^ -~]'  $someargument

我发现它具有与以下功能相同的功能:

grep -P -L -r '[^[:ascii:]]' $someargument

1 个答案:

答案 0 :(得分:1)

注意:

答案假定您仅使用POSIX [[:ascii]]与[a-zA-Z]范围匹配的语言环境。

在正则表达式中,您可以指定一个类似于[a-z]的范围来匹配任何小写字母。在引擎盖后面,正则表达式引擎实际上检查了97到122之间的任何代码点(字节值)。

类似地,正则表达式[^-〜]匹配ascii图表中不在32(空格)和波浪号(〜)之间的任何代码点(〜),即126。因此通常用于检查特定字符串是否仅包含人类可读的文本(在键盘中:-))。也就是说,它用于清理字符串值。

如果字符串中有任何控制字符,例如control-A \ x01,则正则表达式将匹配,您可以使用regex_replace()函数将其删除。

请参阅下面的此ascii图表。

ascii chart

考虑以下示例:

egrep -Rl pattern directory | while read path; do echo $path && mv $path /tmp; done

注意:regex [^-〜]将与换行符,制表符和控件供稿匹配,通常多行字符串中允许使用,但您可能希望在匹配项中排除它们

在这种情况下,您可以指定[^ \ n \ t \ r-〜]