我希望用\u…
的代码点替换U + 00C0到U + 02AF范围内的字符,例如á
- > \u00E1
。是否有任何sed函数来获取匹配字符的代码点号?
答案 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
将其转换为十六进制。