不知道如何解释这个,但我想要实现的是: - 拖尾文件并为图案A点击 - 然后我想管道到另一个customGrepFunction,它匹配模式B,如果B匹配echo out out。需要customGrepFunction才能执行其他自定义操作。
这里的粘性部分是如何使grepCustomFunction在这里工作。换句话说,当只有patternA匹配回显整行时以及当patterA& patternB匹配打印输出定制的东西: 当我只跑:
tail -f file.log | grep patternA
我可以看到pattenA行正在打印/拖尾但是当我添加customGrepFunction时没有任何反应。
tail -f file.log | grep patternA | customGrepFunction
customGrepFunction应该在我的bin文件夹中全局可用:
customGrepFunction(){
if grep patternB
then
echo "True"
fi
}
我有这个设置,但它没有做我需要它做的事情,只有当我按Ctrl + C并退出拖尾时它才会回显。 我在这里缺少什么?
由于
答案 0 :(得分:3)
代码:if grep patternB; then echo "true"; fi
...等待grep patternB
退出,只有当tail -f file.log | grep patternA
的输入达到EOF时才会退出。由于tail -f
会永远等待新内容,因此永远不会成为EOF,因此您的if
语句永远不会完成。
请勿在功能内部使用grep
。相反,逐行处理内容并使用bash的本机正则表达式支持:
customGrepFunction() {
while IFS= read -r line; do
if [[ $line =~ patternB ]]; then
echo "True"
fi
done
}
接下来,确保grep
不缓冲内容(如果是,那么它将仅以大块写入您的代码,延迟直到这样的块可用)。执行此操作的方法因实现而异,但使用GNU grep时,它看起来像:
tail -f file.log | grep --line-buffered patternA | customGrepFunction