s3i*_*ani 6 command-line grep arabic text-processing
我有阿拉伯语塔什基尔语TXT
的大文件,我正在尝试查找包含特定模式mashkula的 行,我尝试了以下语法:\xd9\x8e \xd9\x8b \xd9\x8f \xd9\x8c \xd9\x91 \xd9\x92 \xd9\x8d
grep
cat file.txt | grep "\xd8\xa7\xd9\x87\xd9\x84\xd8\xa7"\n
Run Code Online (Sandbox Code Playgroud)\n在我插入塔什基尔标记之前,这不会返回任何内容:
\ncat file.txt | grep "\xd8\xa3\xd9\x87\xd9\x92\xd9\x84\xd8\xa7\xd9\x8b"\n
Run Code Online (Sandbox Code Playgroud)\n我得到了正确的输出
\n\xd8\xa3\xd9\x87\xd9\x92\xd9\x84\xd8\xa7\xd9\x8b
我也尝试过
\ngrep -P "[\xd9\x8f\\ \xd9\x91\\ \xd9\x8e\\ \xd9\x8b\\ \xd9\x90\\ \xd9\x8d\\ \xd9\x8c\\ \xd9\x92\\ \\~]|[\xd8\xa7\xd9\x87\xd9\x84\xd8\xa7]" file.txt\n
Run Code Online (Sandbox Code Playgroud)\n这将返回不同模式中的所有匹配字符:
\n\xd8\xa3\xd9\x87\xd9\x92\xd9\x84\xd8\xa7\xd9\x8b \xd8\xa3 ... \xd9\x87\xd9\x92.. \xd9\x84\xd9\x8b\xd8\xa7 \xd8\xa3\xd9\x86\xd9\x92\xd8\xaa\xd9\x8e \xd9\x84\xd9\x8e\xd9\x8a\xd9\x92\xd9\x84\xd8\xa7\xd9\x8b ..\n
Run Code Online (Sandbox Code Playgroud)\n如何使用 grep 匹配阿拉伯语变音标记?\n在使用 grep 之前是否可以从文本中删除塔什基尔标记?\n我的操作系统是 Ubuntu 18.04
\n更新:此时,我使用以下命令从文本中删除塔什基尔标记:\n sed "s/[\xd9\x8f \xd9\x91 \xd9\x8e \xd9\x8b \xd9\x90 \xd9\x8d \xd9\x8c \xd9\x92]//g"
,然后我就可以grep
得到我想要的了。但在这种方法中,sed
命令会删除所有文本中的空格!
假设源和语言环境为 UTF-8,使用 Perl删除U+064B - U+065B范围:
\n$ echo "\xd8\xa3\xd9\x8e\xd9\x87\xd9\x92\xd9\x84\xd8\xa7\xd9\x8b \xd9\x88\xd9\x8e \xd8\xb3\xd9\x8e\xd9\x87\xd9\x92\xd9\x84\xd8\xa7\xd9\x8b" | perl -CSAD -pe \'s/[\\x{064B}-\\x{065B}]//g\'\n\n\xd8\xa3\xd9\x87\xd9\x84\xd8\xa7 \xd9\x88 \xd8\xb3\xd9\x87\xd9\x84\xd8\xa7\n
Run Code Online (Sandbox Code Playgroud)\n来源:这是有效的,因为阿拉伯语中的元音变音符号是组合字符,这意味着简单的搜索和删除这些字符就足够了。
\nGNUsed
似乎也可以工作(请注意,根据这些答案,还有其他变音符号):
$ echo "\xd8\xa3\xd9\x8e\xd9\x87\xd9\x92\xd9\x84\xd8\xa7\xd9\x8b \xd9\x88\xd9\x8e \xd8\xb3\xd9\x8e\xd9\x87\xd9\x92\xd9\x84\xd8\xa7\xd9\x8b" | sed -e \'s/\xd9\x8e//g;s/\xd9\x8f//g;s/\xd9\x90//g;s/\xd9\x91//g;s/\xd9\x8b//g;s/\xd9\x8c//g;s/\xd9\x8d//g;s/\xd9\x92//g\'\n\n\xd8\xa3\xd9\x87\xd9\x84\xd8\xa7 \xd9\x88 \xd8\xb3\xd9\x87\xd9\x84\xd8\xa7\n
Run Code Online (Sandbox Code Playgroud)\nuconv
也可能有效。
请查看本文和s3idani帖子的评论区以获取更多信息。
\ntr
非 ASCII (Unicode) 字符?tr
Unicode 字符的模拟?