我在阿拉伯语 Tashkil中有大TXT
文件,我正在尝试查找包含特定模式mashkula的 行,我尝试了以下语法:َ ً ُ ٌ ّ ْ ٍ
grep
cat file.txt | grep "اهلا"
在我插入 Tashkil 标记之前,这不会返回任何内容:
cat file.txt | grep "أهْلاً"
我得到正确的输出
أهْلاً
我也试过
grep -P "[ُ\ ّ\ َ\ ً\ ِ\ ٍ\ ٌ\ ْ\ \~]|[اهلا]" file.txt
这会以不同的模式返回所有匹配的字符:
أهْلاً أ ... هْ.. لًا أنْتَ لَيْلاً ..
如何将阿拉伯变音符号与 grep 匹配?是否可以在使用 grep 之前从文本中删除 Tashkil 标记?我的操作系统是 Ubuntu 18.04
更新:此时,我从文本中删除塔什基尔标记:
sed "s/[ُ ّ َ ً ِ ٍ ٌ ْ]//g"
,然后我可以得到grep
我想要的。但是在这种方法中,sed
命令会从所有文本中删除空格!
假设 UTF-8 源和语言环境,使用 Perl删除U+064B - U+065B范围:
来源:这是有效的,因为阿拉伯语中的元音变音符号是组合字符,这意味着简单的搜索和删除这些就足够了。
GNU
sed
似乎也可以工作(请注意,基于这些答案还有其他变音符号):uconv
也可能工作。查看评论区和s3idani 的帖子以获取更多信息。
其他来源
tr
识别非 ascii (Unicode) 字符?tr
Unicode 字符的模拟?根据Pablo Bianchi的回答,解决方法如下:
文本:
أَهْلاً وَ سَهْلاً
命令:
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 "اهلا"
输出:
اهلا