我想从文本文件中删除除Unicode emoticons之外的所有非ASCII字符。我使用以下命令将删除所有非ASCII字符。
perl -i.bak -pe 's/[^[:ascii:]]//g'
是否可以修改此命令以排除表情符号?
编辑:
示例输入:Good morning! #Happy #StPatricksDay ♣♥
示例输出:Good morning! #Happy #StPatricksDay
答案 0 :(得分:2)
您可以在Perl中指定范围,如下所示:
s='Good morning! #Happy #StPatricksDay ♣♥'
echo "$s" | perl -C -pe 's/[^[:ascii:]\x{1F600}-\x{1F64F}]+//g'
Good morning! #Happy #StPatricksDay
答案 1 :(得分:0)
只需扩展您要排除的字符即可包含表情符号:
perl -i.bak -pe 's/[^[:ascii:]\p{block:Emoticons}\N{U+2639}\N{U+263A}\N{U+263B}]//g'
经过大量的讨论并尝试不同的开关后,我发现了一个与\ p {block ...}和\ N {U + xxxx}类型的正则表达式一起使用的组合。
perl -CS -pe 's/[^[:ascii:]\p{block:emoticons}\N{U+2639}-\N{U+263B}]//g'
请注意,您的文字必须为utf-8才能生效(至少在我的cygwin设置中)。