grep для (курчавых | microsoft | умных) цитат - PullRequest
4 голосов
/ 01 марта 2011

У меня есть огромная папка, заполненная XML-документами, некоторые из которых могут сломаться, потому что они содержат эти фигурные кавычки, то есть цитаты Microsoft Word, то есть умные цитаты.Я просто хочу быстро проверить, с чем я столкнулся.Кто-нибудь знает, как найти их, чтобы я мог легко найти нарушителей?

Изменить

Вот упрощенный пример.

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

Ответы [ 5 ]

5 голосов
/ 01 марта 2011

Вьющиеся кавычки имеют следующие кодовые точки 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, так что вы можете просто сравнить непосредственно для последовательности байтов.

4 голосов
/ 17 сентября 2013

Вы можете найти файлы, содержащие последовательности UTF-8, упомянутые так:

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

-r делает его рекурсивным, а -P указывает grep использовать Perl-совместимые регулярные выражения.

0 голосов
/ 18 декабря 2015

Я на Mac, и встроенный grep у меня не сработал сразу (ответ Нейберта). Я закончил тем, что установил Homebrew версию GNU grep:

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

Тогда я могвыполните команды аналогичным образом:

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

В итоге я объединил ответы Далле и Нойберта в этот сценарий , который запустит все известные мне случаи и распечатает их всевыкл.

0 голосов
/ 21 сентября 2012

МОЖЕТ БЫТЬ ДУБЛИКАТ

У меня была ситуация, когда пользователь копировал строки вставки из любого места, и мне приходилось разрешать им ввод, исключая любые специальные символы, кроме кавычек.Цитаты, будь то умный / модный / прямой в этом отношении.Позвольте мне привести пример:

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

0 голосов
/ 01 марта 2011

Если это XML-документы, вы можете открыть один из них, который, как вам известно, содержит оскорбительные кавычки, чтобы точно увидеть, как они выглядят в XML-файле (и скопировать их в буфер обмена, если вы не можете легко их воспроизвести). с вашей клавиатурой).

Предполагая, что ваши кавычки выглядят как или , вы можете сделать что-то вроде sed -i .bak 's/[”„]/"/' file1 file2 ... (при использовании Linux / OSX / cygwin в Windows), чтобы быстро заменить оскорбительные кавычки обычными кавычками, изменив файлы в -местная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...