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

Kenzi NOIKE knoike @ gmail.com
2019年 3月 2日 (土) 13:10:35 UTC


野池です.
Takahashiさん,どうもありがとうございます.
そのような仕組みになっているのですね.了解いたしました.

ただ,吉永さんの調査結果を整理すると,

[ゞ-ゟ] に含まれる.
[ぁ-ゟ] に含まれる.
[ぁ-ゞゟ] には含まれない.

とのことですので,「・」がどこに位置しているのか,いまも想像がつきません... .


> > $ echo ・ | LC_COLLATE=C.UTF-8 sed -r 's/[ゞ-ゟ]/かな/'
> としても同じですが
> > $ echo ・ | LC_COLLATE=C.UTF-8 sed -r 's/[あ-ゞゟ]/かな/'
> は大丈夫なので、「ゟ」まで跨る書き方だと「・」が含まれてしまいます

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



2019年3月2日(土) 22:00 Masakazu Takahashi <emasaka @ gmail.com>:
>
> こんにちは。
>
> 私もよく知らないのですが、LC_COLLATE はたとえば
>
> abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
>
>>
> aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
>
> のように、文字の並び順そのものを定義していたかと思います。
>
> そのため、理論上はどんな並び順も作りえるかと。
>
> On Sat, Mar 2, 2019 at 9:48 PM Kenzi NOIKE <knoike @ gmail.com> wrote:
> >
> > 野池です.
> >
> > > ぁ < ゟ < ・ < ゞ
> >
> > すみません,ヒットしないのですから,この大小関係は間違いですね.
> > 慌てていて申し訳ないです.
> >
> >
> > > $ echo "・" | LC_COLLATE=C.UTF-8 grep "[ぁ-ゟ]"
> > > はヒットして期待外の動作ですが
> > > $ echo "・" | LC_COLLATE=C.UTF-8 grep "[ぁ-ゞゟ]"
> > > はヒットしませんね
> >
> > この現象を説明できる,ぁ, ゞ, ゟ と ・ の大小関係の想像がつきません... .
> >
> >
> >
> >
> > 2019年3月2日(土) 21:41 Kenzi NOIKE <knoike @ gmail.com>:
> > >
> > > 野池です.すみません,ほぼ興味本位の質問になってしまうので,
> > > どなたでもわかる方に教えていただきたいのですが... .
> > >
> > > 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
> >
> >
> >
> > --
> > // Kenzi NOIKE
>
>
>
> --
> Masakazu Takahashi (emasaka)



-- 
// Kenzi NOIKE


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