grep for(curly | microsoft | smart)引号

时间:2011-03-01 17:54:41

标签: regex grep

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

修改

这是一个简化的例子。

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

5 个答案:

答案 0 :(得分:5)

Curly引号具有以下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

XML通常以UTF-8存储,因此您可以直接比较字节序列。

答案 1 :(得分:4)

你可以找到包含这样提到的UTF-8序列的文件:

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

-r使其递归,-P告诉grep使用Perl兼容的正则表达式。

答案 2 :(得分:0)

如果它们是xml文档,您可以打开其中一个包含有问题引号的文档,以查看它们在xml文件中的确切含义(并将它们复制到剪贴板,如果您无法轻松复制它们用你的键盘。)

假设您的引号看起来像,您可以执行sed -i .bak 's/[”„]/"/' file1 file2 ...(如果在Windows上使用Linux / OSX / cygwin)以快速替换违规引号引号,就地修改文件。

答案 3 :(得分:0)

可能是重复的

我有一种情况,用户会从任何地方复制粘贴字符串,我不得不允许他们输入一个除了引号之外的任何特殊字符的条目。对于这件事,行情是聪明/花哨/直接的。让我举例说明:

Text    | Error
----------------
O*Connor| Yes

O'Connor| No

O’Connor| No

我为我的CF代码提出了以下解决方案。

<cfif #REFind("[[:punct:],[:digit:]]",textName)# GT 0 >     
    <cfset temp_name = textName.ReplaceAll(JavaCast( "string", "[^A-Za-z\u2018\u2019\u201A\u201B\u2032\u2035\'\-\ ]" ),JavaCast( "string", "" )) >
<cfif (len(temp_name )EQ len(textName)) >
    <!--- If you find single quote or hyphen, do nothing --->
<cfelse>
    <cfset errormsg = The Text contains special charctaer">
</cfif>

来自http://axonflux.com/handy-regexes-for-smart-quotes

的巨大帮助

答案 4 :(得分:0)

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

brew tap homebrew/dupes
brew install homebrew/dupes/grep

然后我可以以类似的方式运行命令:

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

我最终将dalle和neubert的答案合并到this script,这将运行我目前所知的所有案例并将其全部打印出来。