Grep 正则表达式无法与 Windows 上的 Cygwin 一起使用

发布于 2024-12-02 02:16:13 字数 259 浏览 0 评论 0原文

我正在尝试查找所有非使用 grep 在文件中显示 ascii 字符:

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

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

有什么想法吗?

I'm trying to find all non ascii chars in a file using grep:

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

I think this should work but it returns each row in the file.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

北凤男飞 2024-12-09 02:16:13

grep 无法识别 \x 语法。

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

打印

\x48

'H' 是字符 0x48。)

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

请注意,这并非特定于 Cygwin。

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

grep doesn't recognize the \x syntax.

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

prints

\x48

('H' is character 0x48.)

Your grep is matching all lines because each line contains a character other than \, x, 0, 7, F, and anything in the range 0 .. \.

Note that this is not specific to Cygwin.

GNU grep (which is what Cygwin has) has an experimental -P option that tells it to use Perl-like regular expressions; with that option, it does recognize the \x syntax.

指尖上得阳光 2024-12-09 02:16:13

发现perl可以工作:

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

Found that perl works:

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

伤感在游骋 2024-12-09 02:16:13

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

Grep may be interpreting multibyte (i.e., non-ASCII) characters as several single-byte (ASCII) characters. (This way, this lovely character [U+2229] would show up as " [U+0022] followed by a ) [U+0029].) You'll need to figure out the file's encoding and use a more-sphisticated system that knows Unicode.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文