Grep正则表达式不适用于Windows上的Cygwin

时间:2011-08-31 14:16:47

标签: regex cygwin grep

我正在使用grep尝试find文件中的所有非ascii字符:

grep '[^\x00-\x7F]' myfile

我认为这应该有效,但它会返回文件中的每一行。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

grep无法识别\x语法。

( echo Hello ; echo '\\x48' ) | grep '\x48'

打印

\x48

'H'是字符0x48。)

您的grep匹配所有行,因为每行包含\x07F以外的字符以及0 .. \范围内的任何内容。

请注意,这不是Cygwin特有的。

GNU grep(这是Cygwin所拥有的)有一个实验-P选项,告诉它使用类似Perl的正则表达式;使用该选项,它确实识别\x语法。

答案 1 :(得分:1)

Grep可能将多字节(即非ASCII)字符解释为多个单字节(ASCII)字符。 (这样,这个可爱的字符[U + 2229]会显示为" [U + 0022],然后是) [U + 0029]。)您需要找出文件的编码并使用一个知道Unicode的更复杂的系统。

答案 2 :(得分:1)

发现perl有效:

perl -n -e'打印if / [^ \ x00- \ x7F] /'file