这个问题很像这。我只需要稍微修改一下。
我有一个如下所示的 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 可以做到,我会感到惊讶。我不知道如何检测非英语字符,否则我会使用上一个问题作为参考。
答案1
您可以使用tr
:
tr -s '[\0-\200]' ' ' < file
用单个空格替换从 ASCII-code=(0) 10到 ASCII-code=(128) 10的所有字符。
\nnn
是八进制值的字符nnn
。(128)十进制=(200)八进制
[\0-\200]
像 alpha 类一样,[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
答案2
由于您特别询问了 perl,因此似乎可以使用 perl 的\p{ARABIC}
unicode 属性说明符来完成此操作,尽管在应用正则表达式测试之前似乎有必要解码 UTF-8 编码。
最简单的方法是删除非阿拉伯字符并重新编码:
$ 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
كما, شئ, منذ, لذا, واحد, جدا, يمكنك, لديك, الرجل, يبدو, كلا, لدي, أوه, تفعل, سيدي
[由于某种原因,当阿拉伯文本从我的终端粘贴到浏览器时,逗号和空格会交换位置 - 也许是因为从右到左的脚本属性?]