Lar*_*her 5
如果我理解您的问题是正确的(“每隔一段时间 grep 会找到一个匹配项”部分),那么您的程序会在其较长的运行时间期间多次生成正模式,并且您希望script.sh
在这些时间点运行。
当您通过管道program
传输到 grep 并使用 grep 退出代码时&&
,您script.sh
只执行一次并且仅在program
s 运行时结束时执行。
如果我的假设是正确的(您想要script.sh
运行多次),那么您需要在|
符号后面使用“if then logic”。一种方法是使用 awk 而不是 grep:
program | awk '/pattern/ {system("./script.sh")}'
/pattern/ {system("./script.sh")}
单引号中是 awk 脚本
/pattern/
指示 awk 查找匹配的行pattern
并执行以下花括号内的说明
system("./script.sh")
在后面的花括号内通过 awks命令/.../
执行当前目录script.sh
system
总体效果是script.sh
:pattern
在program
.
另一种方法是使用sed
:
program | sed -n '/pattern/ e ./script.sh'
-n
防止 sed 在program
s 输出中打印每一行
/pattern/
是program
s 输出中行的过滤条件:行必须匹配pattern
e ./script.sh
是当一行匹配模式时 sed 执行的操作:它执行您的script.sh
更多推荐
命令,grep
发布评论