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
$