grep by special character“

时间:2018-04-07 18:59:15

标签: bash grep special-characters

如何使用特殊字符通知grep文件与"不同

我试图逃避它但不会工作。

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

文件示例

<p>"hello”></p>

我希望能够grep -rne "\”"

1 个答案:

答案 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