Удалите весь английский текст и оставьте арабский текст

Этот вопрос много похож на это. Мне просто нужна небольшая модификация.

У меня есть файл CSV, который похож на это

y(document).ready(function($) {     $('#wp_mep_2').mediaelementplayer({         m:1                 ,features: ['playpause','current','progress','duration','volume','tracks','fullscreen']         ,audioWidth:250,audioHeight:30  }); });","I'm not"
"100","أستطيع                                                                                                                           00:0000:0000:00  jQuery(document).ready(function($) {   $('#wp_mep_1').mediaelementplayer({         m:1                 ,features: ['playpause','current','progress','duration','volume','tracks','fullscreen']         ,audioWidth:250,audioHeight:30  }); });","I"
"101","كما","As"
"102","شئ","Anything"
"103","منذ","Since"
"104","لذا","So"
"105","واحد","One"
"106","جدا","Very"
"107","يمكنك","You can"
"108","لديك","You have"
"109","الرجل","Man"
"110","يبدو","Seems"
"111","كلا","Both"
"112","لدي","I have"
"113","أوه","Oh"
"114","تفعل","Do"
"115","سيدي","Sir"

Я хочу удалить все кроме арабского текста, запятая разделила слова, с которыми я могу работать. grep или Perl могли сделать это? Если grep может сделать это, я буду поражен. Я не знаю, как не обнаружить ни один английские символы, иначе я использовал бы предыдущий вопрос в качестве ссылки.

5
задан 6 May 2018 в 23:07

2 ответа

Можно использовать tr:

tr -s '[\0-\200]' ' ' < file

замените все символы из кода ASCII = (0) 10 к коду ASCII = (128) 10 с одиночным пробелом.

\nnn символ с восьмеричным значением nnn. (128) десятичное число = (200) восьмеричный

[\0-\200] как альфа-класс [A-Z] это - класс символов, который включает все управляющие символы ASCII.

или использование:

tr -s '[ -~]' ' ' < file

Эта команда совпадает с tr -s '[\40-\176]' ' ' < file команда, которая заменяет все символы ASCII между пространством и символ ~. Посмотрите управляющие символы ASCII.

Вывод:

 أستطيع كما شئ منذ لذا واحد جدا يمكنك لديك الرجل يبدو كلا لدي أوه تفعل سيدي 

Иначе использует тот класс и awk команда:

awk '{gsub(/[\0-\200]/, "");print}'  file
أستطيع
كما
شئ
منذ
لذا
واحد
جدا
يمكنك
لديك
الرجل
يبدو
كلا
لدي
أوه
تفعل
سيدي

Можно использовать те же методы с grep команда:

grep -Po '[^ -~]+' file
grep -Po '[^\0-\200]+' file
grep -Po '[^\x0-\x80]+' file  #used HEX code
7
ответ дан 23 November 2019 в 08:48

Так как Вы спросили о жемчуге а именно, это, кажется, возможно сделать это с помощью perl's \p{ARABIC} спецификатор свойства unicode, хотя это, кажется, необходимо декодировать кодировку UTF-8 прежде, чем применить тест regex.

В его самом простом Вы могли просто удалить неарабские символы и повторно закодировать:

$ perl -MEncode -lpe '$_ = decode("UTF-8",$_); s/\P{ARABIC}+//g; $_ = encode("UTF-8", $_)' yourfile.csv 

أستطيع
كما
شئ
منذ
لذا
واحد
جدا
يمكنك
لديك
الرجل
يبدو
كلا
لدي
أوه
تفعل
سيدي

Если Вы хотите обработать CSV немного большим количеством структурированного способа, Вы могли бы сделать что-то вроде этого:

#!/usr/bin/perl -wl

use strict;
use Encode;

my @F;
my @matches;
my $infile = $ARGV[0];

open FILE, $infile or die $!;

while (<FILE>) {
  @F = split(',');
  push @matches, grep { decode("UTF-8",$_) =~ /\"\p{ARABIC}+\"/ } @F;
}

print join ", ", map {$_ =~ s/\"//g; $_} @matches;

Тестирование снова с данными, которыми снабжают, как yourfile.csv:

$ ./print_arabic.pl yourfile.csv
كما, شئ, منذ, لذا, واحد, جدا, يمكنك, لديك, الرجل, يبدو, كلا, لدي, أوه, تفعل, سيدي

[По некоторым причинам запятая и пространство переключают места, когда арабский текст вставляется в браузер от моего терминала - возможно, из-за справа налево свойство сценария?]

4
ответ дан 23 November 2019 в 08:48

Другие вопросы по тегам:

Похожие вопросы: