Regex grep for(curly | microsoft | smart)引号

Regex grep for(curly | microsoft | smart)引号,regex,grep,Regex,Grep,我有一个巨大的文件夹,里面装满了xml文档,其中一些文档可能会断开,因为它们包含那些卷曲的引号,即Microsoft Word引号,即智能引号。我只是想快速检查一下,看看我面对的是什么。有人知道如何为他们辩护,这样我就可以很容易地找到罪犯吗 编辑 这里有一个简化的例子 <?xml version="1.0" encoding="UTF-8"?> <items> <item>Pretend this is a curly quote: '</item&

我有一个巨大的文件夹,里面装满了xml文档,其中一些文档可能会断开,因为它们包含那些卷曲的引号,即Microsoft Word引号,即智能引号。我只是想快速检查一下,看看我面对的是什么。有人知道如何为他们辩护,这样我就可以很容易地找到罪犯吗

编辑

这里有一个简化的例子

<?xml version="1.0" encoding="UTF-8"?>
<items>
  <item>Pretend this is a curly quote: '</item>
</items>

假设这是一段卷曲的引语:'

如果它们是xml文档,您可以打开其中一个您知道包含违规引号的文档,以查看它们在xml文件中的确切外观(如果您无法用键盘轻松复制它们,请将它们复制到剪贴板)


假设您的引用看起来像
,您可以执行类似于
sed-i.bak的/[”/“/”/“/”file1 file2…
(如果在Windows上使用Linux/OSX/cygwin)要用普通引号快速替换有问题的引号,请在适当位置修改文件。

卷曲引号具有以下Unicode代码点和UTF-8序列:

Name CodePoint UTF-8 sequence ---- --------- -------------- LEFT SINGLE QUOTATION MARK U+2018 0xE2 0x80 0x98 RIGHT SINGLE QUOTATION MARK U+2019 0xE2 0x80 0x99 SINGLE LOW-9 QUOTATION MARK U+201A 0xE2 0x80 0x9A SINGLE HIGH-REVERSED-9 QUOTATION MARK U+201B 0xE2 0x80 0x9B LEFT DOUBLE QUOTATION MARK U+201C 0xE2 0x80 0x9C RIGHT DOUBLE QUOTATION MARK U+201D 0xE2 0x80 0x9D DOUBLE LOW-9 QUOTATION MARK U+201E 0xE2 0x80 0x9E DOUBLE HIGH-REVERSED-9 QUOTATION MARK U+201F 0xE2 0x80 0x9F 名称代码点UTF-8序列 ---- --------- -------------- 左单引号U+2018 0xE2 0x80 0x98 右单引号U+2019 0xE2 0x80 0x99 单低9引号U+201A 0xE2 0x80 0x9A 单高反9引号U+201B 0xE2 0x80 0x9B 左双引号U+201C 0xE2 0x80 0x9C 右双引号U+201D 0xE2 0x80 0x9D 双低-9引号U+201E 0xE2 0x80 0x9E 双高反向-9引号U+201F 0xE2 0x80 0x9F
XML通常存储在UTF-8中,因此您可以直接比较字节序列。

可能是重复的

我遇到过这样一种情况,用户会从任何地方复制粘贴字符串,我必须允许他们输入除引号以外的任何特殊字符。引号在这方面可能很聪明/花哨/直接。让我举例说明:

Text |错误
----------------
O*Connor |是的
奥康纳|不
奥康纳|不
我为我的CF代码提出了以下解决方案



您可以找到包含上述UTF-8序列的文件:

grep -r -P "\xE2\x80\x9C" .

-r
使其具有递归性,
-p
告诉grep使用与Perl兼容的正则表达式。

我在Mac电脑上,内置的grep不能立即为我工作(neubert的回答)。我最终安装了自制版本的GNU grep:

brew tap homebrew/dupes
brew install homebrew/dupes/grep
然后我可以以类似的方式运行命令:

ggrep -r -P "\xE2\x80\x9C" .
etc.

我最终将dalle和neubert的答案结合起来,将运行我目前了解的所有案例,并将它们全部打印出来。

请给出一个例子(摘录)好吗?如果这些文档中包含XML,w3c.org上有一个标准,定义了处理器、编码等的有效形式。您是指attribute=“value”吗“在元素中?如果有问题的引号只是内容怎么办?这是通过ssh实现的,有问题的部分看起来像
–Y
,因此我担心这不起作用。如果文件不是utf-8怎么办?文件是utf-8,我在查找字节序列0xE2 0x80 0x99。”。但是,我仍然不清楚您是如何对其进行grep的。@sln:BOM或XML声明将告诉您使用了哪种编码,如果它们都不存在,则表示UTF-8。无论如何,如果XML文件不是UTF-8,那么可以先转换它。