我正在尝试使用大多数sed和一些perl命令从要解析的文本文件中删除所有表情符号,最好将它们存储在单独的文件中,但这不是必需的。
我可以轻松地用bash或perl做到这一点吗?还是应该使用其他语言?
编辑:谢谢Cyrus和Barmar向我指出正确的方向,朝this question的方向前进。但是,它没有告诉我如何仅从文本文件中删除表情符号。他们使用bash行:
grep -P "[\x{1f300}-\x{1f5ff}\x{1f900}-\x{1f9ff}\x{1f600}-\x{1f64f}\x{1f680}-\x{1f6ff}\x{2600}-\x{26ff}\x{2700}-\x{27bf}\x{1f1e6}-\x{1f1ff}\x{1f191}-\x{1f251}\x{1f004}\x{1f0cf}\x{1f170}-\x{1f171}\x{1f17e}-\x{1f17f}\x{1f18e}\x{3030}\x{2b50}\x{2b55}\x{2934}-\x{2935}\x{2b05}-\x{2b07}\x{2b1b}-\x{2b1c}\x{3297}\x{3299}\x{303d}\x{00a9}\x{00ae}\x{2122}\x{23f3}\x{24c2}\x{23e9}-\x{23ef}\x{25b6}\x{23f8}-\x{23fa}]" myflie.txt | more
这使我所有包含表情符号的lines。
[grep -Pv
将从输入中删除那些行,
[grep -Po
将只返回表情符号,
grep -Pov
不返回任何内容。
有人知道如何从文本中删除那些特定字符吗?
注意:我知道this question,但是我的文本文件完全没有格式化。表情符号与其余文本混合在一起。
在Perl中,删除表情符号很容易。更新您的任务的模式和其他详细信息:
#!perl
use open qw(:std :utf8);
my $pattern = "[\x{1f300}-\x{1f5ff}\x{1f900}-\x{1f9ff}\x{1f600}-\x{1f64f}\x{1f680}-\x{1f6ff}\x{2600}-\x{26ff}\x{2700}-\x{27bf}\x{1f1e6}-\x{1f1ff}\x{1f191}-\x{1f251}\x{1f004}\x{1f0cf}\x{1f170}-\x{1f171}\x{1f17e}-\x{1f17f}\x{1f18e}\x{3030}\x{2b50}\x{2b55}\x{2934}-\x{2935}\x{2b05}-\x{2b07}\x{2b1b}-\x{2b1c}\x{3297}\x{3299}\x{303d}\x{00a9}\x{00ae}\x{2122}\x{23f3}\x{24c2}\x{23e9}-\x{23ef}\x{25b6}\x{23f8}-\x{23fa}]";
while( <DATA> ) { # use <> to read from command line
s/$pattern//g;
print;
}
__DATA__
Emoji at end 😀
🗿 Emoji at beginning
Emoji 🙏 in middle
UTS #51 mentions an Emoji property,但未在perluniprop中列出。如果有这样的事情,您可以简化删除带有该属性的所有内容:
while( <DATA> ) {
s/\p{Emoji}//g;
print;
}
对于单线飞机来说是幸运的:
$ perl -pe 's/\p{Emoji}//g' file1 file2
此外,您还无法一字排开长字符类。