Этот вопрос много похож на это. Мне просто нужна небольшая модификация.
У меня есть файл 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 может сделать это, я буду поражен. Я не знаю, как не обнаружить ни один английские символы, иначе я использовал бы предыдущий вопрос в качестве ссылки.
Можно использовать 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
Так как Вы спросили о жемчуге а именно, это, кажется, возможно сделать это с помощью 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
كما, شئ, منذ, لذا, واحد, جدا, يمكنك, لديك, الرجل, يبدو, كلا, لدي, أوه, تفعل, سيدي
[По некоторым причинам запятая и пространство переключают места, когда арабский текст вставляется в браузер от моего терминала - возможно, из-за справа налево свойство сценария?]