【问题标题】:sed: matching unicode blocks withsed:匹配 unicode 块
【发布时间】:2014-04-22 10:24:39
【问题描述】:

我正在拼命尝试使用 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 形式的字符范围。

谢谢, 托马斯

【问题讨论】:

  • 原因可能是代理在 UTF-8 中无效。

标签: unicode utf-8 sed unicode-escapes


【解决方案1】:

尝试为 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, --regexp-extended

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

【讨论】:

  • 谢谢!尝试过,还需要更改其他一些行 - 但 InHigh_Surrogates 似乎仍然是问题......
  • 但这对你有用吗?如果没有,请用您面临的确切问题更新您的问题。如果是,请注意您可以将答案标记为已接受。
  • 抱歉不准确 - 不,使用 -r 也不起作用。在我看来,SED 不知道 unicode 块——或者我太笨了,无法让它工作;)我无法给出比提供的更清晰的解释。在这两种方式中,我都收到了与我最初发帖中描述的相同的错误消息。
  • 很抱歉,我不知道还能是什么。您可以尝试在此站点中查看可能的选项。例如,Remove unicode characters from textfiles - sed , other bash/shell methods
猜你喜欢
  • 2015-07-03
  • 1970-01-01
  • 2022-01-12
  • 2014-06-17
  • 1970-01-01
  • 2015-05-09
  • 2013-05-20
  • 2019-08-27
  • 1970-01-01
相关资源
最近更新 更多