获取匹配字符的代码点

时间:2014-12-15 15:09:24

标签: unicode sed

我希望用\u…的代码点替换U + 00C0到U + 02AF范围内的字符,例如á - > \u00E1。是否有任何sed函数来获取匹配字符的代码点号?

1 个答案:

答案 0 :(得分:2)

在sed中没有这样的功能。 Perl救援:

perl -i~ -CD -pe 's/([\x{c0}-\x{2af}])/sprintf "\\u%04X", ord $1/ge' file.txt

(适用于UTF-8的输入。)

说明:

  • -i~告诉Perl替换文件,留下备份。
  • -CD告诉Perl在输入和输出上假设UTF-8。
  • -p告诉perl逐行处理输入,例如sed
  • s///g是全局替换,就像在sed。
  • 中一样
  • /e选项意味着应该评估替换,即它不是字符串,而是返回值用于替换匹配部分的代码。这里的代码采用char的ord,即其代码,并使用printf将其转换为十六进制。