【问题标题】:sed and special charsed 和特殊字符
【发布时间】:2011-05-17 19:16:35
【问题描述】:

我正在尝试以下 sed 命令,但我对特殊字符没有运气:

echo "x#asdf" | sed "s/\([^-]\)#/\1\n/g"

x
asdf

但如果我在 test.txt 中使用一些特殊字符

echo "ä#asdf" | sed "s/\([^-]\)#/\1\n/g"

ä#asdf

为什么?

这行得通:

echo "ü#asdf" | sed "s/ü/-/g"
-#asdf

但这不是:

echo "ü#asdf" | sed "s/[ü]/-/g"
ü#asdf

【问题讨论】:

  • 在这里工作正常。您的 sed 脚本没有问题,一定与您的语言环境/文件编码有关。
  • 我有以下语言环境:'de_DE.UTF-8'
  • 它适用于 en_US.UTF-8 和 de_DE.UTF-8 的 GNU sed 版本 4.2.1。你的sed 是哪个版本的?
  • GNU sed 版本 4.1.2 - 也许我的问题令人困惑:
  • 回声“ä#asdf” | sed "s/\([^-]\)#/\1\n/g" 应该输出与 echo "x#asdf" | sed "s/\([^-]\)#/\1\n/g"

标签: sed char special-characters


【解决方案1】:

对此我不确定,因为您的 sed 命令对我来说可以正常工作(gnu sed 4.1.5),但请尝试以这种方式调用 sed:

$ LANG=de_DE.UTF-8 sed ...

有关更多信息,请参阅此帖子:Why does sed fail with International characters and how to fix?

如果这不起作用,如果可以的话,升级到 gnu sed 4.2 可能会有所帮助。 NEWS 文件说 4.2 的“多字节处理已修复”,但没有进一步详细说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2019-09-07
    • 2021-06-11
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多