我有一个UTF8编码的txt文件,包含(大部分)拉丁字母的单词(包括重音字母)和(一些)希腊语单词(包括变音符号)。
我想找到所有希腊语"句子"(即希腊字母表中的单词,用空格和/或常用标点符号分隔,但没有拉丁字符),并用相同的句子替换它们,但包装在\greektext{...}中LaTeX 命令。
E.g. Пάτριος πολιτείαshould be replace by \greektext{Пάτριος πολιτεία}
那么,基本问题是,是否有可能用sed选择希腊词组,即上面定义的希腊语"句子"。
我认为像这样的正则表达式可能会让您伸张正义:
/([u0370-u03FFu0400-u04FF]+s+[u0370-u03FFu0400-u04FF]+)+/
u0370-u03FF
是希腊语和科普特语块,u0400-u04FF
是西里尔语块。
对所有指定的字符执行charinfo
,这些块将涵盖您:
% charinfo Пάτριος πολιτεία
U+041F CYRILLIC CAPITAL LETTER PE [Lu]
U+03AC GREEK SMALL LETTER ALPHA TONOS [Ll]
U+03C4 GREEK SMALL LETTER TAU [Ll]
U+03C1 GREEK SMALL LETTER RHO [Ll]
U+03B9 GREEK SMALL LETTER IOTA [Ll]
U+03BF GREEK SMALL LETTER OMICRON [Ll]
U+03C2 GREEK SMALL LETTER FINAL SIGMA [Ll]
U+03C0 GREEK SMALL LETTER PI [Ll]
U+03BF GREEK SMALL LETTER OMICRON [Ll]
U+03BB GREEK SMALL LETTER LAMBDA [Ll]
U+03B9 GREEK SMALL LETTER IOTA [Ll]
U+03C4 GREEK SMALL LETTER TAU [Ll]
U+03B5 GREEK SMALL LETTER EPSILON [Ll]
U+03AF GREEK SMALL LETTER IOTA TONOS [Ll]
U+03B1 GREEK SMALL LETTER ALPHA [Ll]
但是 AFAIK sed 不能很好地处理多字节字符。以下Perl脚本将起作用:
#!/usr/bin/perl -p
use open qw(:std :utf8);
s/([x{0370}-x{03FF}x{0400}-x{04FF}]+s+[x{0370}-x{03FF}x{0400}-x{04FF}]+)+/\greektext{$&}/u'
和用法:
perl my_script.pl < my_input > my_output