我在 OS X(通过 Homebrew 安装的 4.2.2)上尝试使用 GNU sed 进行替换。但这不起作用。
printf "Hello\x92 World" | gsed -r "s/[\x92]/'/g"
预期输出是:
Hello' World
实际输出是:
Hello<unknown character symbol> World
我也尝试过:
printf "\x92" | gsed -r 's/[\x92]/P/g'
但我继续得到一个不可打印的字符,即字节“\x92”。
我在这里做错了什么?
答案1
我刚刚sed
彻底检查了 的信息页面 ( info sed
) 并用各种方法做了相当多的实验。
我的结论:您无法将 代表的字符\x92
放入字符类中。
但是,您可以|
改为使用。
以下是一些演示:
$ printf "a\x92\n"
a?
$ printf "a\x92\n" | sed 's/[a\x92]/P/g'
P?
$ printf "a\x92\n" | sed 's/[a\\x92]/P/g'
P?
$ printf "a\x92\n" | sed 's/[a'$'\x92'']/P/g'
P?
$ printf "a\x92\n" | sed 's/[a'"$(printf '\x92')"']/P/g'
P?
$ printf "a\x92\n" | sed 's/[a[\x92]]/P/g'
a?
$ printf "a\x92\n" | sed 's/a\|\x92/P/g'
PP
$ printf "a\x92\n" | sed -r 's/a|\x92/P/g'
PP
$