有没有支持 unicode 的 sed 替代方案?

有没有支持 unicode 的 sed 替代方案?

例如:

sed 's/\u0091//g' file1

现在,我必须hexdump获取十六进制数并输入sed如下:

$ echo -ne '\u9991' | hexdump -C
00000000  e9 a6 91                                          |...|
00000003

进而:

$ sed 's/\xe9\xa6\x91//g' file1

答案1

只需使用该语法:

sed 's/馑//g' file1

或者以转义形式:

sed "s/$(echo -ne '\u9991')//g" file1

(请注意,旧版本的 Bash 和某些 shell 不理解echo -e '\u9991',因此请先检查。)

答案2

Perl 可以做到这一点:

echo 汉典“馑”字的基本解释 | perl -CS -pe 's/\N{U+9991}/Jin/g'

-CS为标准输入、输出和错误打开 UTF-8。

答案3

多个版本sed支持Unicode:

我找不到有关 BSD sed 的信息,我认为这很奇怪,但我认为它也支持 Unicode 的可能性很大。不幸的是,没有标准方法来告诉sed使用哪种编码,因此每个编码都以自己的方式进行。

答案4

这对我有用:

$ vim -nEs +'%s/\%u9991//g' +wq file1

这比我想要的更冗长;这是完整的解释:

  • -n禁用 vim 交换文件
  • -EEx改进模式
  • -s静音模式
  • +'%s/\%u9991//g'执行替换命令
  • +wq保存并退出

相关内容