我有什么bash脚本grep输出到多个variables,但不知道如何做到这一点:
command |grep bla > $result1 $result2 etc...
有任何想法吗?
小号
使用read shell内置命令
不会像这样工作:
for BLAH in `command | grep <stuff>` do echo $BLAH done
如果你举了一些例子,这将有所帮助,但我想你可能需要像这样的东西:
while read line; do ip=$(echo $line | egrep -o '\([0-9.]+\)'); echo $ip; done < <(ping google.com)
然后你可以做多行,如ip=...行。 -o到grep只表示匹配的部分。
但真的,支持使用正则expression式捕获组的东西比我想的要好,我会用perl。
或者,如果你想要一个variables中的每一行,你可能需要一个数组。 例如:
$ while IFS= read -r arr[i++]; do :;done < <(ping google.com | grep 'bytes from') $ echo ${arr[2]} 64 bytes from yx-in-f100.1e100.net (74.125.45.100): icmp_seq=2 ttl=55 time=63.9 ms
如果你只是想“多重任务”,那么shell就不会直接支持,据我所知。 所以你会:
foo=$(command | grep whatever) bar="$foo" baz="$foo"
如果您需要为多个variables做更多的事情,那么您可能没有像往常一样正确地解决问题,最好是说明您的最终目标。
你需要扩展你想要做的事情。
例如,你是否试图parsing随机输出你想要的每一行发生在一个单词snoopy的行后发生?
这样的事情可以通过阅读和案例以这样的方式完成:
command | grep blah | while read line do case "$line" in *snoopy*) read result_after_snoopy ; echo "This is where I do something when I find a line with the word snoopy in it and the line that comes after" echo "this is what I do with the line with snoopy in it" echo "$line" | cut -f3 -d% echo "This is what I do with the line after" echo "$result_after_snoopy" | md5sum ;; *woodstock*) echo "This line had woodstock in it" ;; esac done
如果你想要别的东西,让我们知道!