[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:26981] Re: sub()/gsub() error in gawk-ja
こんにちは。松田陽一@PAL-NET三鷹です。
From: Fumitoshi UKAI <ukai@debian.or.jp>
Subject: [debian-users:26980] Re: sub()/gsub() error in gawk-ja
Date: Fri, 16 Feb 2001 16:04:43 +0900
> At Fri, 16 Feb 2001 15:46:09 +0900,
> MATSUDA Yoh-ichi / 松田陽一 wrote:
>
> > 日常使用している gawk-ja なんですが、 sub() 及び gsub() の実装に
> > 不具合と思われる挙動を発見しました。
>
> gawk-ja は知りませんが、これは mawkとgawkでの
> 文字列定数の中での \ エスケープの仕様の違いっぽいですが。
>
> % echo | mawk '{print "\&";}'
> \&
>
> # mawk(1)より
> # Data types, conversion and comparison
> # If you escape any other character \c, you get \c, i.e.,
> # mawk ignores the escape.
>
> % echo | gawk '{print "\&";}'
> &
> % echo | gawk '{print "\\\&";}'
> \&
>
> # gawk(1)より
> # String Constants
> # \c The literal character c.
>
> で、awk では & はマッチした文字列とおきかわるので
>
> > hoge:~/work$ echo ">"|mawk "{sub(/>/,\"\>\");print}"
> > >
> > hoge:~/work$ echo ">"|gawk "{sub(/>/,\"\>\");print}"
> > >gt;
>
> となります。
> # gawk では escapeをはずされると />/を > で subすることになるので
> # & はマッチした > になって 結果 >gt; になる。
>
> 以下のようにすると
> % echo ">"|gawk '{print "\\\>";}'
> >
> となります。
げ、バックスラッシュ 3つなんて、そんなぁ…
だとすると、 man gawk での
| gsub(r, s [, t]) for each substring matching the
| regular expression r in the string
| t, substitute the string s, and
| return the number of substitu-
| tions. If t is not supplied, use
| $0. An & in the replacement text
| is replaced with the text that was
| actually matched. Use \& to get a
^^^^^^^^^^^^^^^
| literal &. See AWK Language Pro-
^^^^^^^^^^
| gramming for a fuller discussion
| of the rules for &'s and back-
| slashes in the replacement text of
| sub(), gsub(), and gensub().
この記載は嘘だってことになりませんか?
> > BTS に出すべきでしょうか?
> >
> > # 出し方を知らないんですが…(汗)
>
> http://bugs.debian.org/ を見ましょう:)
> # 例えば reportbug を使うとか。
ポインタありがとうございます。
これが「仕様」ということで片付けられてしまうならば、出すのは
止めておきますが、今後利用する可能性が考えられますので、後々
の参考にします。
--
♪ねぇ、雪が降るまえに。
松田 陽一(yoh)
mailto:matsuda@xxxxxxxxxxxx
http://www2.palnet.or.jp/~matsuda/index.htm