grep by special character“

问题描述 投票:1回答:1

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

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

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

文件示例

<p>"hello”></p>

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

bash grep special-characters
1个回答
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或正则表达式元字符,所以不需要反斜杠它。


在更多细节中,基于注释,基本问题是您的系统设置为使用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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.