sedがASCII以外のバイトを置き換えないのはなぜですか?

sedがASCII以外のバイトを置き換えないのはなぜですか?

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
$ 

おすすめ記事