Как правильно заменить символы UTF-8 на HTML-объекты? - PullRequest
1 голос
/ 08 марта 2019

Я бегу cygwin под windows 10

Иметь файл словаря (1-dictionary.txt), который выглядит следующим образом:

labelling   labeling
flavour flavor
colour  color
organisations   organizations
végétales   végétales
contr?lée   contrôlée
"   "

Разделителями между являются TAB с (\t с).

Файл словаря кодируется как UTF-8.

Хотите заменить слова и символы в первом столбце словами и объектами HTML во втором столбце.

Мой исходный файл (2-source.txt) содержит символы UTF-8 и ASCII. Исходный файл также кодируется как UTF-8.

Пример текста выглядит так:

Cultivar was coined by Bailey and it is generally regarded as a portmanteau of "cultivated" and "variety" ... The International Union for the Protection of New Varieties of Plants (UPOV - French: Union internationale pour la protection des obtentions végétales) offers legal protection of plant cultivars ...Terroir is the basis of the French wine appellation d'origine contrôlée (AOC) system

Я запускаю следующую sed однострочную в сценарии оболочки (./3-script.sh):

sed -f <(sed -E 's_(.+)\t(.+)_s/\1/\2/g_' 1-dictionary.txt) 2-source.txt > 3-translation.txt

Замена английских (en-GB) слов американскими (en-US) словами в 3-translation.txt прошла успешно.

Однако замена символов ASCII, таких как символ кавычки, и слов UTF-8 дает такой результат:

vvégétales#x00E9;gvégétales#x00E9;tales)
contrcontrôlée#x00F4;lcontrôlée#x00E9;e (AOC)

Если я использую только определенный символ (не полное слово), я получаю следующие результаты:

vé#x00E9;gé#x00E9;tales
"#x0022cultivated"#x0022
contrô#x00F4;lé#x00E9;e

Символ кавычки ASCII добавляется с &#x0022; - он не заменяется.

Аналогично, символ UTF-8 добавляется к своей сущности HTML, а не заменяется сущностью HTML.

Ожидаемый результат будет выглядеть следующим образом:

v#x00E9;g#x00E9;tales
#x0022cultivated#x0022
contr#x00F4;l#x00E9;e

Как изменить скрипт sed так, чтобы целевые символы ASCII и UTF-8 были заменены их эквивалентами сущности HTML, как определено в файле словаря?

1 Ответ

1 голос
/ 08 марта 2019

Я пробовал, просто замените все & на \& в вашем 1-dictionary.txt решит вашу проблему.

Заменитель Седа использует регулярное выражение в качестве части из , поэтому, когда вы используете его таким образом, обратите внимание на эти символы регулярного выражения и добавьте \, чтобы подготовить их к экранированный .

И часть от до также будет иметь специальные символы, в основном \ и &, добавьте дополнительные \, чтобы подготовить их к сбежал тоже.

Выше ссылка на документ GNU sed , для другой версии sed вы также можете проверить man sed.

...