(grep)正则表达式匹配非ASCII字符?

Ror*_*ory 157 regex unicode grep ascii

在Linux上,我有一个包含大量文件的目录.其中一些具有非ASCII字符,但它们都是有效的UTF-8.一个程序有一个错误,阻止它使用非ASCII文件名,我必须找出有多少受影响.我打算这样做find,然后做一个grep打印非ASCII字符,然后做一个wc -l找到数字.它不一定是grep; 我可以使用任何标准的Unix 正则表达式,如Perl,sed,AWK等.

但是,是否存在"任何不是ASCII字符的字符"的正则表达式?

Ali*_*xel 281

这将匹配单个非ASCII字符:

[^\x00-\x7F]
Run Code Online (Sandbox Code Playgroud)

这是一个有效的PCRE(Perl兼容的正则表达式).

您还可以使用POSIX缩写:

  • [[:ascii:]] - 匹配单个ASCII字符
  • [^[:ascii:]] - 匹配单个非ASCII字符

[^[:print:]] 对你来说可能就够了.**

  • 这是完全正确的.但是你必须使用pcregrep,而不是标准的grep.如果您的终端设置为UTF8,[^ [:print:]]将无效. (10认同)
  • @adrianm:不,`^`在PCRE中有效. (2认同)

小智 36

不,[^\x20-\x7E]不是ASCII.

这是真正的ASCII:

 [^\x00-\x7F]
Run Code Online (Sandbox Code Playgroud)

否则,它将修剪掉作为ASCII表一部分的换行符和其他特殊字符!


Rub*_*ias 5

您还可以检查此页面:Unicode正则表达式,因为它包含一些有用的Unicode字符类,如:

\p{Control}: an ASCII 0x00..0x1F or Latin-1 0x80..0x9F control character.