如何查找带有变音符号的阿拉伯字符?

如何查找带有变音符号的阿拉伯字符?

我有大TXT文件阿拉伯语 塔什基尔我正在尝试找到包含特定模式的行马什库拉使用 َ ً ُ ٌ ّ ْ ٍ,我尝试了以下grep语法:

cat file.txt | grep "اهلا"

在我插入 Tashkil 标记之前,此操作不会返回任何内容:

cat file.txt | grep "أهْلاً"

我得到了正确的输出

أهْلاً

我也试过

grep -P "[ُ\ ّ\ َ\ ً\ ِ\ ٍ\ ٌ\ ْ\ \~]|[اهلا]" file.txt

这将返回不同模式中所有匹配的字符:

أهْلاً أ ... هْ.. لًا أنْتَ لَيْلاً ..

如何使用 grep 匹配阿拉伯语变音符号?在使用 grep 之前是否可以从文本中删除 Tashkil 标记?我的操作系统是 Ubuntu 18.04

更新: 此刻,我使用 删除文本中的 Tashkil 标记: sed "s/[ُ ّ َ ً ِ ٍ ٌ ْ]//g",然后我就可以grep得到我想要的。但是使用这种方法,sed命令会删除所有文本中的空格!

答案1

假设源和语言环境为 UTF-8,删除U+064B-U+065B使用 Perl 的范围:

$ echo "أَهْلاً وَ سَهْلاً" | perl -CSAD -pe 's/[\x{064B}-\x{065B}]//g'

أهلا و سهلا

来源:这是因为阿拉伯语的元音变音符号组合字符,这意味着简单搜索并删除这些就足够了。

GNUsed似乎也可以工作(请注意,基于那些答案还有其他变音符号):

$ echo "أَهْلاً وَ سَهْلاً" | sed -e 's/َ//g;s/ُ//g;s/ِ//g;s/ّ//g;s/ً//g;s/ٌ//g;s/ٍ//g;s/ْ//g'

أهلا و سهلا

uconv也可能有效。

查看此评论区,s3idani 的发布以获取更多信息。

其他来源

答案2

基于巴勃罗·比安奇的回答,解决方法如下:

文本: أَهْلاً وَ سَهْلاً

命令:cat Text | sed -e 's/َ//g;s/ُ//g;s/ِ//g;s/ّ//g;s/ً//g;s/ٌ//g;s/ٍ//g;s/ْ//g;s/أ/ا/g;s/آ/ا/g;s/إ/ا/g' | grep -o "اهلا"

输出:اهلا

相关内容