我有大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 "اهلا"
输出:اهلا