Hello,
I have an array, for example:
local -a list
list=("... one giraffe ..." "... two cows ..." "... one monkey ..." "... three lemmings ...")
("..." can represent anything)
and I want to get parts of each item each time a specific pattern
occurs. For example, I want to get the word after "one". I therefore
want to finish with an array containing ("giraffe" "monkey")
I found a way with a loop :
local -a secondlist
local item
for item in $list; do
if [[ $item = (#b)*one\ ([a-z]#)* ]]; then
secondlist=($secondlist $match[1])
fi
done
print -l $secondlist
Great, works fine.
But I was wondering if there was something more zsh-ish that could allow
me to do it in one instruction.
I found :
print -l ${${(M)list##*one ([a-z]#)*}//(#b)*one ([a-z]#)*/$match[1]}
but I think this is inefficient as the pattern has to be evaluated
twice.
What would be the better way to do that ?
thanks
Attachment:
signature.asc
Description: Digital signature