我正在尝试从文件中删除所有Unicode字符(西班牙字符除外)。
匹配不同的元音不是问题,áéíóúÁÉÍÓÚ
不会使用以下正则表达式替换(但所有其他Unicode似乎都已替换):
perl -pe 's/[^áéíóúÁÉÍÓÚ[:ascii:]]//g;' filename
但是,当我在正则表达式中添加反问号¿或感叹号¡时,其他Unicode字符也会被匹配并排除在我想删除的地方:
perl -pe 's/[^áéíóúÁÉÍÓÚ¡¿[:ascii:]]//g;' filename
不会替换以下内容(某些内容不可打印):
³ � �
我在这里缺少明显的东西吗?我也欢迎在终端上执行其他操作。
答案 0 :(得分:1)
您有一个UTF8编码的文件并使用Unicode字符,因此,您需要传递特定的选项集以使Perl知道。
您应该添加-Mutf8
以便Perl识别直接在Perl代码中使用的UTF8编码字符。
此外,您需要传递-CSD
(等效于-CIOED
),以便对输入进行解码,并对输出进行重新编码。此值取决于编码,它将适用于UTF8编码。
perl -CSD -Mutf8 -pe 's/[^áéíóúñüÁÉÍÓÚÑÜ¡¿[:ascii:]]//g;' filename
不要忘记Ü
和ü
。