Я бегу 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 добавляется с "
- он не заменяется.
Аналогично, символ UTF-8 добавляется к своей сущности HTML, а не заменяется сущностью HTML.
Ожидаемый результат будет выглядеть следующим образом:
v#x00E9;g#x00E9;tales
#x0022cultivated#x0022
contr#x00F4;l#x00E9;e
Как изменить скрипт sed
так, чтобы целевые символы ASCII и UTF-8 были заменены их эквивалентами сущности HTML, как определено в файле словаря?