[ubuntu-jp:6133] Re: sed の正規表現

Kenzi NOIKE knoike @ gmail.com
2019年 3月 2日 (土) 12:41:53 UTC


野池です.すみません,ほぼ興味本位の質問になってしまうので,
どなたでもわかる方に教えていただきたいのですが... .

Takahashiさんの実験結果からすると,LC_COLLATE の定義に起因してそうには思うのですが,

> $ echo "・" | LC_COLLATE=C.UTF-8 grep "[ぁ-ゟ]"
> はヒットして期待外の動作ですが
> $ echo "・" | LC_COLLATE=C.UTF-8 grep "[ぁ-ゞゟ]"
> はヒットしませんね

C.UTF-8 での LC_COLLATE の定義が原因だとすると,
この現象が理解できないのですが,定義次第でこのようなことが起きるのでしょうか?
ぁ, ゞ, ゟ と ・ の大小関係の想像がつきません.

もしかして,非日本語圏の方には「ゞ」は濁点つきの文字と理解されていて,
大きなコードが割り当てられていて,

ぁ < ゟ < ・ < ゞ

となっている,という状況でしょうか???
この妙な大小関係が当たっているとすると,
[ぁ-ゞゟ] は,実際は [ぁ-ゞ] に含まれてしまっていることになるので,
確かに起こっている現象の説明はつくのですが,C.UTF-8 の LC_COLLATE が,
元の文字コード順を劇的に入れ替えているとは思いづらいです... .



2019年3月2日(土) 21:01 Yoshinaga Hiroyuki <yoshinaga.hiroyuki @ nifty.com>:
>
> On Sat, Mar 02, 2019 at 07:15:43PM +0900, Masakazu Takahashi wrote:
> > 原因まではわかりませんが、これは sed ではなく GNU libc、特にその中の
> > ロケール定義の違いによる挙動ではないでしょうか。
> >
> > ためしに Ubuntu 16.04 用の libc-bin パッケージをダウンロードして
> > /usr/lib/locale/C.UTF-8/LC_COLLATE ファイルを抜き出し、Ubuntu 18.10 に
> > 持ってきて上書きしてみたら、Ubuntu 16.04 の挙動になりました。
> 16.04 の環境がないので、同じこと確認できませんでしたが、
> $ echo "・" | LC_COLLATE=C.UTF-8 grep "[ぁ-ゟ]"
> はヒットして期待外の動作ですが
> $ echo "・" | LC_COLLATE=C.UTF-8 grep "[ぁ-ゞゟ]"
> はヒットしませんね
>
> 仰るように sed 固有ではなく GNU ツール共通のようですね
>
> --
> -^.~.^-   吉永博之
> ~= ^ =~-  yoshinaga.hiroyuki @ nifty.com
>  ^ ~ ^ ~
>


-- 
// Kenzi NOIKE


ubuntu-jp メーリングリストの案内