我如何查找和删除文本文件中的表情符号?

问题描述 投票:0回答:1

我正在尝试使用大多数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,但是我的文本文件完全没有格式化。表情符号与其余文本混合在一起。

regex bash perl text emoji
1个回答
0
投票

在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

此外,您还无法一字排开长字符类。

© www.soinside.com 2019 - 2024. All rights reserved.