zsh で簡易 grep 的なことができたので、紹介します。
実行例
${name:#pattern}
と (M)
フラグを組み合わせると配列から glob pattern にマッチしたものだけ抜き出せます。
% echo ${(FM)${(f)"$(< /etc/hosts)"}:#*local*}
127.0.0.1 localhost
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
(M)
フラグなしだと grep -v
のようにマッチしなかったものだけが残ります。
% echo ${(F)${(f)"$(< /etc/passwd)"}:#*:[1-8]*}
root:x:0:0:root:/root:/bin/bash
news:x:9:9:news:/var/spool/news:/bin/sh
詳細な解説は blog を参照してください。