作者: Bunta
日時: 2008/9/17(12:49)
Bruce.さん、いつもお世話になっています。ありがとうございます。

> echo [TSfree:13] Re: 便利なメーラは?|mbsed -e "s/[^[]//g"
> [

 なるほど!

> echo [TSfree:13] Re: 便利なメーラは?|mbsed -e "s/[^]\[]//g"
> []

 なるほど? ! うむ、 キャラクタ・クラス内のエスケープというのは、 vxw
(Vz  です)の方言であって、ふつう概念として存在しない、と考えを改めたの
だけど…。(改めて正解ですよ>文太くん)

> echo [TSfree:13] Re: 便利なメーラは?|mbsed -e "s/[^][]//g"
> mbsed: -e expression #1, char 10: unterminated `s' command

 それでも、エスケープするしかないのか?(しかし、あれがあれば!)


 以下、ありがたかったです。どっかで探さなくては、と昨晩思っておりました。

Basic Regular Expressions
http://www.opengroup.org/onlinepubs/007908799/xbd/re.html#tag_007_003_005

RE Bracket Expression

 要点:
 ']'  はキャラ・クラス内で、最初の場所、および否定の場合には '^' のあと
では、特殊な意味を失いリテラルになる。

----------
C:\>echo ]|mbsed -e "s/[]]/a/"
a

C:\>echo ]x|mbsed -e "s/[^]]/a/g"
]a

----------変な例。

> Otherwise, it terminates the bracket expression, unless it appears
> in a collating symbol (such as [.].]) or is the ending right-bracket for a
> collating symbol, equivalence class or character class.

 ここが分からなかったので調べたのですが(『ハンドブック』を含め)、これ
は分からなくてよいのだ、と判断しました。

http://docs.sun.com/app/docs/doc/816-5175/regex-5?l=Ja&a=view
より引用。
   A  collating  symbol  is a collating element enclosed within bracket-
period  ([..])   delimiters.  Multi-character collating elements must be
represented  as  collating  symbols  when it is necessary to distinguish
them  from  a  list of the individual characters that make up the multi-
character  collating  element.   For  example,  if  the string "ch" is a
collating  element in the current collation sequence with the associated
collating symbol <ch>, the expression [[.ch.]]  will be treated as an RE
matching  the character sequence ch, while [ch] will be treated as an RE
matching  c  or  h.   Collating  symbols  will be recognized only inside
bracket  expressions.   This implies that the RE [[.ch.]]*c  matches the
first  to  fifth character in the string chchch.  If the string is not a
collating  element  in  the current collating sequence definition, or if
the  collating  element has no characters associated with it, the symbol
will be treated as an invalid expression.


要点の続き:
'.' '*' '[' '\' は、[ ]の中で特殊な意味を失う。そうだ、そうだ。'['もなんだ。
'-' は、ほぼ、']'に同じ。[-ac] あるいは [ac-] 。最初か最後でイテラル。
(先頭を/[]-]/のように']'に取られる可能性があるから最後が'-'の場所っていう
のが、覚え方として良さそうですね。)


>mbsed --ver
>GNU sed version 4.1.5
> [cut]
>Modified for Win32 Japanese by moonlight-mile@...
>Build date is Sep  1 2008
 ず、ずるい。上げてください〜。m(__)m m(__)m m(__)m

 僕のは、これ。(;_;)
C:\>mbsed --version
GNU sed version 4.1.4
Modified for Win32 Japanese by moonlight-mile@...
Build date is Dec  6 2005


C:\>echo [TSfree:13] Re: 便利なメーラは?|onigsed -e "s/[^][]//g"
onigsed: -e expression #1, char 10: unterminated `s' command

C:\>echo [TSfree:13] Re: 便利なメーラは?|onigsed -e "s/[^]\[]//g"
[]
 う、涙。同じみたいです。m(__)m


閑話休題(か?)

C:\>echo [xxxx]zzz|egsed -e "s/[^][]//g"
[]

C:\>echo [xxxx]zzz|ssed -e "s/[^][]//g"
ssed: -e expression #1, char 10: unterminated `s' command

 ssed もいけませんよね。Bruce. さんにも試していただけて、バグ・レポート
がバグってないと確認できたら、Paolo さんに報告に行きたいのですが…。m(__)m

 ご存じだと思いますし、既にお持ちかとも思いますが、ココです。
http://sed.sourceforge.net/grabbag/ssed/

Bunta