sed:匹配unicode块

时间:2014-03-17 09:21:51

标签: unicode utf-8 sed unicode-escapes

我正在拼命尝试使用sed从文件中替换某些unicode字符(字形)。但是我继续为其中一些失败,即来自unicode块的那些:

\p{InHigh_Surrogates}: U+D800–U+DB7F
\p{InHigh_Private_Use_Surrogates}: U+DB80–U+DBFF
\p{InLow_Surrogates}: U+DC00–U+DFFF

我尝试过(在通过-f开关加载的sed配置文件中):

s/\p{InHigh_Surrogates}/###/  --> no effect at all
s/\\p\{InHigh_Surrogates\}/###_D-NON-UTF8_###/ -> error message 'Invalid content of \{\}'

有人有个建议吗?此外,我不一定专注于使用块 - 但我也尝试定义\ xd800- \ xdfff形式的字符范围。

谢谢, 托马斯

1 个答案:

答案 0 :(得分:2)

尝试使用sed的-r标志:

$ sed -r 's/\\p\{InHigh_Surrogates\}/###/g' file
###: U+D800–U+DB7F
\p{InHigh_Private_Use_Surrogates}: U+DB80–U+DBFF
\p{InLow_Surrogates}: U+DC00–U+DFFF

来自man sed

  

-r, - regexx-extended

     

在脚本中使用扩展正则表达式。