前に、 grepで非ASCII文字だけを抽出(排除)する ということをやっていたけど、今回は置換してみる。 置換といえばまずは sed になるのが、sed(GNU sed)でASCII文字以外を置換する場合、以下のようにする。

echo これはTESTなんだよ | sed 's/[^\d0-\d127]/xx/g'
$ echo これはTESTなんだよ | sed 's/[^\d0-\d127]/xx/g'
xxxxxxTESTxxxxxxxx

もちろん、その逆でASCII文字だけを置換することも可能。

echo これはTESTなんだよ | sed 's/[\d0-\d127]/X/g'
$ echo これはTESTなんだよ | sed 's/[\d0-\d127]/X/g'
これはXXXXなんだよ

ちなみに、perlを使う場合だともうちょっと楽に指定ができる。

echo "これはTESTなんだよ" | perl -pe 's/[^[:ascii:]]/x/g'
echo "これはTESTなんだよ" | perl -pe 's/[[:ascii:]]/x/g'
$ echo "これはTESTなんだよ" | perl -pe 's/[^[:ascii:]]/x/g'
xxxxxxxxxTESTxxxxxxxxxxxx
$ echo "これはTESTなんだよ" | perl -pe 's/[[:ascii:]]/x/g'
これはxxxxなんだよx

余り使う機会はなさそうだけど、ASCII文字だけのテストデータを作りたいとか、そういうときに使えるかも。