使用Unicode代码或十六进制使用sed或tr unix命令替换重音或特殊字符

时间:2014-06-26 09:42:48

标签: unix unicode replace sed

我想知道我是否可以使用http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=0x&unicodeinhtml=hex中的字符集来使用sed或tr替换重音字符或特殊字符。

我有一个使用sed命令的脚本。有时它不起作用:(

它是这样的:

sed -e "s/\"//g" \
                -e "s/\'//g" \
                -e "s/[$]/S/g" \
                -e "s/%//g" \
                -e "s/&/E/g" \
                -e "s/@/a/g" \
                -e "s/\^//g" \
                -e "s/\`//g" \
                -e "s/|//g" \
                -e "s/~//g" \
                -e "s/¡/i/g" \
                -e "s/¨//g" \
                -e "s/\´//g" \
                -e "s/¢/c/g" \
                -e "s/£//g" \
                -e "s/§//g" \
                -e "s/¬//g" \
                -e "s/°/o/g" \
                -e "s/·/./g" \
                -e "s/¹/1/g" \
                -e "s/²/2/g" \
                -e "s/³/3/g" \
                -e "s/¿//g" \
                -e "s/ª/a/g" \
                -e "s/à/a/g" \
                -e "s/á/a/g" \
                -e "s/â/a/g" \
                -e "s/ã/a/g" \
                -e "s/ä/a/g" \
                -e "s/å/a/g" \
                -e "s/æ/ae/g" \

Os,我在想如果我在sed中使用十六进制或八进制unicode代码,它会起作用。但我不知道怎么......

e.g. echo ¢ | sed 's/\x{00A2}/cent/g'

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的脚本

......对我来说很好。每个替换都按预期执行,除了一个:

-e "s/\'//g" \

应该是

-e "s/'//g" \

(没有必要逃避单引号,你的表达式在双引号之间。)

应用于包含

的文件
"'$%&@^`|~¡¨´¢£§¬°·¹²³¿ªàáâãäåæ

输出:

  S E a   i  c   o.123 aaaaaaaae

(没有空格。我添加它们以便更容易比较orginialm模式和替换。)

Hexa代码

要替换为十六进制代码,请使用以下语法:

echo ¢ | sed 's/\xC2\xA2/cent/g'

为什么会这样?使用XX语法为sed提供十六进制值\xXX(请参阅info sed)。对于您的¢字符,您链接的网页上的第三列表格会显示0xc2 0xa2

编码

当您尝试替换UTF-8编码字符时,我假设您的文件使用UTF-8编码。如果不是,快速解决方案是将其(或其副本)转换为UTF-8(例如,使用您喜欢的文本编辑器)。