Как найти и удалить смайлики в текстовом файле? - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь удалить все смайлики из текстового файла, который я анализирую, используя в основном sed и некоторые команды perl, и желательно хранить их в отдельном файле, но это не обязательно.

Можно ли сделать это легко с помощью bash или perl? Или я должен использовать другой язык?

РЕДАКТИРОВАТЬ: Спасибо, Сайрус и Бармар, что указали мне в правильном направлении, к этот вопрос . Тем не менее, он не говорит мне, как удалить только смайлики из текстового файла. Они используют строку 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

, которая возвращает мне все строки , содержащие эмодзи.

grep -Pv удалит эти строки из ввода,

grep -Po вернет только смайлики,

grep -Pov ничего не вернет.

Кто-нибудь знает, как удалить эти конкретные символы из текста?

Примечание: мне известен этот вопрос , но мой текстовый файл вообще не отформатирован. Смайлики смешаны с остальным текстом.

1 Ответ

3 голосов
/ 17 октября 2019

В 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 упоминает свойство Emoji , но оно не указано в perluniprop . Если бы была такая вещь, вы бы упростили удаление чего-либо с этим свойством:

while( <DATA> ) {
    s/\p{Emoji}//g;
    print;
    }

Это было бы удачно для однострочного:

$ perl -pe 's/\p{Emoji}//g' file1 file2

Есть Emoticonсвойство, но это не распространяется на ваш класс персонажа. Я не смотрел, чтобы увидеть, будет ли оно таким же, как у свойства Emoji в UTS # 51.

Кроме того, вы застряли с классом длинных символов в вашей однострочной.

...