gpt4 book ai didi

linux - 在 Bash 中查找并替换不间断空格字符

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:07 25 4
gpt4 key购买 nike

我有一个包含一些特殊字符的文档,例如不间断空格、不间断连字符等。我想规范化这个文档,用空格替换这些特殊字符。另外由于这个文档的内容是从不同的资源收集而来的,所以我在里面有不同形式的“Yeh”(ь),我想把它们归一化。

是否可以使用 sed 命令在文档中查找和替换 unicode 字符?我可以使用 Unicode 代码代替字符的表面形式吗?例如,我可以在 sed 命令中使用 x00a0 而不是不间断空格吗?怎么办?


抱歉解释不当。我的文档以 UTF8 编码,包含非英文字符。例如,我有一份阿拉伯语文档、一份乌尔都语文档和一份波斯语 (Farsi) 文档。现在我想用另一个字符替换这些文件中的一些字符。归一化,我的意思是我想把所有形式的“Yeh”替换成一种形式。 (正如您现在可能看到的,阿拉伯语中使用的这个字符有多种形式,但为了简化和一些处理问题,我想统一所有这些形式。

最佳答案

要处理 UTF-8 文件,您必须从头到尾解析每个字符。如果您需要高效地执行此操作,则必须编写真正的程序,而不是尝试编写解决方案脚本。

如果你只是想编写脚本,那么将它转换为 UTF-16 然后处理字符会更容易。

一个相当低效的方法是:

#!/bin/bash
function px {
local a="$@"
local i=0
while [ $i -lt ${#a} ]
do
printf \\x${a:$i:2}
i=$(($i+2))
done
}
(iconv -f UTF8 -t UTF16 | od -x | cut -b 9- | xargs -n 1) |
if read utf16header
then
px $utf16header
out=''
while read line
do
if [ "$line" == "000a" ]
then
out=$out$line
px $out
out=''
else
# put your coversion logic here.
# e.g
# if [ "$line" == "0031" ] ; then
# line="0041"
# fi
out=$out$line
fi
done
fi | iconv -f UTF16 -t UTF8

关于linux - 在 Bash 中查找并替换不间断空格字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11272374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com