如何替换除西​​班牙字符以外的所有unicode字符?

时间:2019-02-03 20:08:21

标签: regex perl unicode

我正在尝试从文件中删除所有Unicode字符(西班牙字符除外)。

匹配不同的元音不是问题,áéíóúÁÉÍÓÚ不会使用以下正则表达式替换(但所有其他Unicode似乎都已替换):

perl -pe 's/[^áéíóúÁÉÍÓÚ[:ascii:]]//g;' filename

但是,当我在正则表达式中添加反问号¿或感叹号¡时,其他Unicode字符也会被匹配并排除在我想删除的地方:

perl -pe 's/[^áéíóúÁÉÍÓÚ¡¿[:ascii:]]//g;' filename不会替换以下内容(某些内容不可打印): ³ � � ­

我在这里缺少明显的东西吗?我也欢迎在终端上执行其他操作。

1 个答案:

答案 0 :(得分:1)

您有一个UTF8编码的文件并使用Unicode字符,因此,您需要传递特定的选项集以使Perl知道。

您应该添加-Mutf8以便Perl识别直接在Perl代码中使用的UTF8编码字符。

此外,您需要传递-CSD(等效于-CIOED),以便对输入进行解码,并对输出进行重新编码。此值取决于编码,它将适用于UTF8编码。

perl -CSD -Mutf8 -pe 's/[^áéíóúñüÁÉÍÓÚÑÜ¡¿[:ascii:]]//g;' filename

不要忘记Üü