【问题标题】:Partial replace with sed command使用 sed 命令进行部分替换
【发布时间】:2020-10-09 15:17:09
【问题描述】:

我们有一个包含一些 utf-16 十进制字符的文件,我们想用以下方式替换它们

Test Line in a file \u343- ? some random words  \u1233? 300 \u241? \u208?\cell

要求的输出是

Test Line in a file \u343- ? some random words  UTF16-1233| 300 UTF16-241| UTF16-208|\cell

要求是将\u[0-9]+?改为UTF16-[0-9]+| 将初始 \u 替换为 UTF16- 和结尾?用管子|。 请注意 \u 和 ? 之间是否有任何非数字字符不应该考虑

【问题讨论】:

  • 等等,\u1233 是作为单个 utf 字符存储在文件中的,作为 2 个字节还是这些是 6 个单独的字符,6 个字节?
  • 6 个单独的字符。但长度可能会有所不同,如 \u241 将是 5

标签: linux bash sed replace ksh


【解决方案1】:

使用sed就地修改文件,可以:

  • 匹配\\u([0-9]+)\?:

    匹配文字\u,匹配并捕获一个或多个数字,匹配文字?

  • 替换UTF16-\1:

    替换为字符串UTF16-,后跟捕获的组。


$ sed -i -E 's/\\u([0-9]+)\?/UTF16-\1|/g' file
$ cat file
Test Line in a file \u343- ? some random words  UTF16-1233| 300 UTF16-241| UTF16-208|\cell

【讨论】:

  • 谢谢保罗。这就是我一直在寻找的。 :)
猜你喜欢
  • 2018-09-16
  • 1970-01-01
  • 2013-11-04
  • 2022-01-10
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
相关资源
最近更新 更多