如何使用特殊字符”
通知grep文件与"
不同
我试图逃避它但不会工作。
当我用vim打开文件时,它显示为<94>
文件示例
<p>"hello”></p>
我希望能够grep -rne "\”"
答案 0 :(得分:2)
使用现代GNU grep
和正确配置的区域设置,这应该可以正常工作。
如果您的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或regex元字符,因此不需要反斜杠。
在更多细节中,基于注释,基本问题是您的系统设置为使用UTF-8,但文件使用不同的编码。因此grep "”"
实际上会搜索U+201D的UTF-8编码,转换为perl -ne 'print if /\xe2\x80\x9d/'
如果您不知道字符的字节值,但您知道编码,则可以执行
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位精明,也许您正在使用Retrocomputing博物馆的设备。如果你的语言环境很奇怪,也许可以排除故障 - 理想情况下你需要UTF-8 everywhere。