bug-gawk
[Top][All Lists]
Advanced

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

Re: How to substitute in a string for the first n matches?


From: arnold
Subject: Re: How to substitute in a string for the first n matches?
Date: Mon, 29 Mar 2021 08:37:58 -0600
User-agent: Heirloom mailx 12.5 7/5/10

Unless your string is many megabytes long, you won't notice the time
issue.

There are other options, for example using patsplit and then putting
the string back together as desired.

In any case, gensub isn't going to be extended to allow arbitrary
ranges and/or lists of occurrences to substitute.  Gawk provides
the basic building blocks as built-in functionality; more specific
use cases should be dealt with in user defined functions.

Arnold

Peng Yu <pengyu.ut@gmail.com> wrote:

> This can be slow as the time complexity should be linear wrt to the
> length of the string (suppose the regex to match is randomly spersed
> in the input string), but this implementation is quadratic.
>
> Should gensub() allows a more flexible "h" parameter so that it can
> accept a range like 1-3 (besides just numbers and "g"/"G") which means
> replacing the 1st, 2nd, and 3rd matches?
>
> On Mon, Mar 29, 2021 at 1:33 AM <arnold@skeeve.com> wrote:
> >
> > This is the right idea. For production use it should be
> > wrapped in a nice function.
> >
> > Arnold
> >
> > david kerns <david.t.kerns@gmail.com> wrote:
> >
> > > don't hate me!
> > >
> > > awk -v n=4 'BEGIN{x="rrrrrrrrrr";for(i=0;i<n;i++){sub("r","x",x)}print x}'
> > >
> > > On Fri, Mar 26, 2021 at 1:57 PM Peng Yu <pengyu.ut@gmail.com> wrote:
> > >
> > > > Hi,
> > > >
> > > > man gawk says.
> > > >
> > > > """
> > > > gensub(r, s, h [, t])
> > > >
> > > > h is a number indicating which match of r to replace.
> > > > """
> > > >
> > > > Is there a way to perform string substitution for the first n matches in
> > > > awk?
> > > >
> > > > --
> > > > Regards,
> > > > Peng
> > > >
> > > >
>
>
>
> -- 
> Regards,
> Peng



reply via email to

[Prev in Thread] Current Thread [Next in Thread]