如何为单个非终止命令的多个输出执行grep和执行不同的命令

时间:2017-12-17 22:19:00

标签: bash grep

我有一个cmd,除非出现错误,否则不会终止。此命令输出字符串,我想捕获不同的字符串,并为每个输出执行不同的命令。

我知道如何处理一个输出($str1 - 简单字符串)和一个特定命令($cmd1 - 简单echo命令)的命令:

until cmd | grep -m 1 "$str1"; do; $cmd1; done

但我希望能够让$str2$cmd2等案例......

1 个答案:

答案 0 :(得分:1)

这样的事情?

cmd | while read -r line; 
do
    case "$line" in
    str1) echo "do something"
    ;;
    str2) echo "do something else"
    ;;
    *) echo "ignore"
    ;;
    esac; 
done

因为OP没有提供任何细节,所以这是一个组成的过程,它会生成一个错误的字符串和出口流

$ (for i in {1..5}; do sleep 1; echo "this is str$i"; done; exit 1) | 
  while read -r line; 
  do     
    case "$line" in     
      *str1*) echo "do something"
      ;;     
      *str2*) echo "do something else"
      ;;     
      *) echo "ignore"
      ;;   
    esac;  
  done

产生

do something
do something else
ignore
ignore
ignore