我有一个带有一些特殊字符的文档,例如非破坏空格,非破坏连字符等。我想规范化这个文档并用空格替换这些特殊字符。另外由于本文档的内容是从不同的资源中收集的,因此我有不同形式的“Yeh”(ی),我想将它们标准化。
是否可以使用 sed 命令在文档中查找和替换unicode字符?我可以使用Unicode代码而不是字符的表面形式吗?例如,我可以在sed命令中使用x00a0而不是非破坏空间吗?怎么样?
抱歉说不好。 我的文档以UTF8编码,包含非英文字符。例如,我有阿拉伯文的文件,乌尔都文的文件,波斯语的文件(波斯语)。现在我想用另一个字符替换这些文件中的一些字符。 通过规范化,我的意思是我想将所有形式的“Yeh”替换为一种形式。 (正如您现在所知,这个字符有很多形式用于阿拉伯语,但为了简化和处理问题,我想统一所有这些形式。
答案 0 :(得分:1)
要处理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
答案 1 :(得分:0)
这可能适合你(GNU sed):
echo abcd | sed 'p;y/\x61\x62\x63/ABC/'
abcd
ABCd