[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:26989] Re: sub()/gsub() error in gawk-ja



小川です。

MATSUDA Yoh-ichi / 松田陽一 <matsuda@xxxxxxxxxxxx> writes:

> > # gawk では escapeをはずされると />/を &gt; で subすることになるので
> > # & はマッチした > になって 結果 >gt; になる。
> > 
> > 以下のようにすると
> >  % echo ">"|gawk '{print "\\\&gt";}'
> >  &gt;
> > となります。

% echo ">" | gawk '{sub(/>/, "\\&gt"); print}'

というように、バックスラッシュ 2つでいいはずです。
バックスラッシュのエスケープシーケンスが使えるのでバックスラッシュ自身
を表す場合はバックスラッシュをバックスラッシュでエスケープする必要があ
るということではないでしょうか。

> げ、バックスラッシュ 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().
> 
> この記載は嘘だってことになりませんか?

man ページのバグっぽいですね。
info の方にはちゃんとバックスラッシュ 2つを書かなければならないとかい
てあるんですが。

それでは
-- 
OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>