【发布时间】:2020-03-13 13:17:19
【问题描述】:
我有以下代码行:
for h in "${Hosts[@]}" ; do echo "$MyLog" | grep -m 1 -B 3 -A 1 $h >> /LogOutput ; done
我的 hosts 变量是一大堆主机
有没有更好的方法来做到这一点,不需要我在每个循环上回显?像 grep 一样代替变量?
【问题讨论】:
-
你不用回显,把
echo "$MyLog" | grep -m 1 -B 3 -A 1 $h换成grep -m 1 -B 3 -A 1 $h <<< "$MyLog" -
@WiktorStribiżew 这有使用临时文件而不是内存管道缓冲区的副作用(我相信)。
-
您想在 LogOutput 中保持相同的顺序吗?如果没有,您似乎只想使用更好的模式来匹配多个字符串。无论哪种方式,似乎 awk 的一次通行证就是您想要的。
-
@WiktorStribiżew 感谢 Wiktor,我以为我已经尝试过这个,但由于非常密集且需要很长时间才能完成而忽略了它。但我又试了一次,几乎是瞬间的,所以我一定是尝试过别的东西。
-
为什么log在一个变量开头?