按特殊字符的 grep"



我怎样才能使用特殊字符 grep 文件注意与"不同

我试图逃避它,但不起作用。

当我使用 vim 打开文件时,它显示为<94>

文件示例

<p>"hello”></p>

我希望能够grep -rne "”"

使用现代 GNUgrep和正确配置的语言环境,这应该可以工作。

如果您的grep不是精通 8 位或您的语言环境被冲洗,请尝试

例如
perl -ne 'print if /x94/' files ...

在Perl中重新实现grep -rn并不难,但如果这是一次性

的快速,请尝试
find . -type f -exec perl -ne 'print "$ARGV:$.:$_" if /x94/' {} +

从某种意义上说,如果将区域设置显示为卷曲引号x94则您的区域设置模糊的或至少略微不标准的。您的系统显然配置为使用一些传统的 Windows 8 位编码...?

卷曲引号不是 shell 或正则表达式元字符,因此不需要反斜杠。


在更多细节中,根据注释,根本问题是您的系统设置为使用 UTF-8,但文件使用不同的编码。所以grep "”"真的搜索 U+201D 的 UTF-8 编码,翻译成perl -ne 'print if /xe2x80x9d/'

如果您不知道字符的字节值,但知道编码,则可以

echo "”" | iconv -f utf-8 -t ENCODING | grep -f -

当然,您可以通过类似的方式轻松获取字节值;

echo "”" | iconv -f utf-8 -t ENCODING | xxd

或者只是在像less这样的工具中查看文件,该工具以十六进制显示未知字节。

也许另请参阅 https://tripleee.github.io/8bit#9d - 只有一个字节,文件使用哪种精确编码并不重要(如果是 HTML,HTML 5 中的默认值是,令人困惑的是,Windows 代码页 1252),但如果你知道或可以猜测预期的渲染,这个表可以帮助你建立精确的编码。

如果你的grep不是8位的精通,也许你正在使用逆向计算博物馆的设备。如果您的语言环境很奇怪,可以对其进行故障排除 - 理想情况下,您希望到处都是 UTF-8。

最新更新