* Per line ${..//..}
@ 2005-10-26 9:40 DervishD
2005-10-26 9:47 ` Peter Stephenson
0 siblings, 1 reply; 5+ messages in thread
From: DervishD @ 2005-10-26 9:40 UTC (permalink / raw)
To: Zsh Users
Hi all :)
I have a parameter containing a bunch of lines, and I have to get
rid of comments (that is "$line" == (#s)[" $'\t'"]#\#*(#e)) and empty
lines (that is "$line" == (#s)[" $'\t'"]#(#e)). I've tried using the
${..//..} syntax for doing substitutions in parameters, but with no
success because I don't know how to properly mark the beginning and
end of a line.
So I'm using this:
for line in ${(f)olddata}
do
[[ "$line" == (#s)[" $'\t'"]#(\#*)#(#e) ]] && continue
newdata+=($line)
done
I'm pretty sure that this is not the best way of "cleaning" the
contents, but I can't think of anything better :( Any idea? Can the
${..//..} construct be used?
Thanks in advance :)
Raúl Núñez de Arenas Coronado
--
Linux Registered User 88736 | http://www.dervishd.net
http://www.pleyades.net & http://www.gotesdelluna.net
It's my PC and I'll cry if I want to...
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Per line ${..//..}
2005-10-26 9:40 Per line ${..//..} DervishD
@ 2005-10-26 9:47 ` Peter Stephenson
2005-10-26 10:15 ` DervishD
0 siblings, 1 reply; 5+ messages in thread
From: Peter Stephenson @ 2005-10-26 9:47 UTC (permalink / raw)
To: Zsh Users
DervishD wrote:
> I have a parameter containing a bunch of lines, and I have to get
> rid of comments (that is "$line" == (#s)[" $'\t'"]#\#*(#e)) and empty
> lines (that is "$line" == (#s)[" $'\t'"]#(#e)). I've tried using the
> ${..//..} syntax for doing substitutions in parameters, but with no
> success because I don't know how to properly mark the beginning and
> end of a line.
You can do something like:
% lines=(foo "# comment" bar " ")
% print -l $lines
foo
# comment
bar
% print -l ${lines:#[[:space:]]#(\#*|)}
foo
bar
pws
This message has been scanned for viruses by BlackSpider MailControl - www.blackspider.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Per line ${..//..}
2005-10-26 9:47 ` Peter Stephenson
@ 2005-10-26 10:15 ` DervishD
2005-10-26 10:27 ` Peter Stephenson
0 siblings, 1 reply; 5+ messages in thread
From: DervishD @ 2005-10-26 10:15 UTC (permalink / raw)
To: Peter Stephenson; +Cc: Zsh Users
Hi Peter :)
* Peter Stephenson <pws@csr.com> dixit:
> DervishD wrote:
> > I have a parameter containing a bunch of lines, and I have to get
> > rid of comments (that is "$line" == (#s)[" $'\t'"]#\#*(#e)) and empty
> > lines (that is "$line" == (#s)[" $'\t'"]#(#e)). I've tried using the
> > ${..//..} syntax for doing substitutions in parameters, but with no
> > success because I don't know how to properly mark the beginning and
> > end of a line.
>
> You can do something like:
>
> % lines=(foo "# comment" bar " ")
> % print -l $lines
> foo
> # comment
> bar
>
> % print -l ${lines:#[[:space:]]#(\#*|)}
> foo
> bar
Unfortunately the original data is not in an array :( Will this
work?:
olddata=(${(f)olddata))
olddata=(${olddata:#...})
I completely forgot about the ${NAME:#PATTERN}. Better said, I
was stuck with ${..//..}. Thanks a lot for the suggestion. You've
given me another idea... I can convert all parameters that store file
contents into arrays, although some of them have \C-M as newline
markers, but that's easy to solve. This way I can do per-line
processing without the need for loops.
Raúl Núñez de Arenas Coronado
--
Linux Registered User 88736 | http://www.dervishd.net
http://www.pleyades.net & http://www.gotesdelluna.net
It's my PC and I'll cry if I want to...
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Per line ${..//..}
2005-10-26 10:15 ` DervishD
@ 2005-10-26 10:27 ` Peter Stephenson
2005-10-26 11:26 ` DervishD
0 siblings, 1 reply; 5+ messages in thread
From: Peter Stephenson @ 2005-10-26 10:27 UTC (permalink / raw)
To: Zsh Users
DervishD wrote:
> Unfortunately the original data is not in an array :( Will this
> work?:
>
> olddata=(${(f)olddata))
> olddata=(${olddata:#...})
Yes, you should be able to combine them along the lines of
${${(f)olddata}:#...}
pws
This message has been scanned for viruses by BlackSpider MailControl - www.blackspider.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Per line ${..//..}
2005-10-26 10:27 ` Peter Stephenson
@ 2005-10-26 11:26 ` DervishD
0 siblings, 0 replies; 5+ messages in thread
From: DervishD @ 2005-10-26 11:26 UTC (permalink / raw)
To: Peter Stephenson; +Cc: Zsh Users
Hi Peter :)
* Peter Stephenson <pws@csr.com> dixit:
> DervishD wrote:
> > Unfortunately the original data is not in an array :( Will this
> > work?:
> >
> > olddata=(${(f)olddata))
> > olddata=(${olddata:#...})
>
> Yes, you should be able to combine them along the lines of
>
> ${${(f)olddata}:#...}
Thanks Peter, this works perfectly. Now I'm doing this:
olddata=(${${(f)olddata}:#...})
I still do the array conversion because this makes easier to find
individual lines afterwards (and I can refer to them by number, which
is something I want).
Thanks! :)
Raúl Núñez de Arenas Coronado
--
Linux Registered User 88736 | http://www.dervishd.net
http://www.pleyades.net & http://www.gotesdelluna.net
It's my PC and I'll cry if I want to...
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-10-26 11:25 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-10-26 9:40 Per line ${..//..} DervishD
2005-10-26 9:47 ` Peter Stephenson
2005-10-26 10:15 ` DervishD
2005-10-26 10:27 ` Peter Stephenson
2005-10-26 11:26 ` DervishD
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).