Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Expanding when matching

    Hi all :)

    I have a couple of doubts about Parameter Expansion, namely in
the replacement field. The first doubt is just curiosity, of the kind
that kills cats... The end of string anchor doesn't seems to work:

    $ testvar="This is my test var"
    $ print ${testvar/This*/Replaced}
    $ print ${testvar/#This*/Replaced}
    $ print ${testvar/var/Replaced}
    This is my test Replaced
    $ print ${testvar/var%/Replaced}
    This is my test var
    $ print ${testvar/#This*%/Replaced}
    This is my test var

    The example doesn't make much sense, but it illustrates what I
mean. What I'm doing wrong? What am I not understanding?

    The second problem is more difficult, I'm afraid. This is best
explained with an example:

    counter=0 ; for number in {1..100}
        print ${number/*0*/Hit a ten! $((counter++))}

    What I want is the substitution (and the postincrement) expanded
and run only when the parameter matches, but instead it is
(correctly) expanded on each call. This is just an example, I'm not
trying to count 'tens', what I really need is a way of doing the
expansion of the replacement expression only when it is a match.

    How can I achieve this with zsh? BTW, what I'm trying to do is to
replace some numbers in one text that should be consecutive but are
not, and they are interspersed with arbitrary text. What I know about
them is that they are alone in a line, so they match certain regex,
no problem about that. But between two of those numbers may be two,
four, ten lines, I don't know :((

    I know, I can do it with awk or sed, but I want to do it with
zsh, just for the sake of it O:) Thanks a lot in advance and sorry
for the noise. Hope some day I'm able to return all the help I get
here :) Thanks, I mean it.

    Raúl Núñez de Arenas Coronado

Linux Registered User 88736
http://www.pleyades.net & http://raul.pleyades.net/

Messages sorted by: Reverse Date, Date, Thread, Author