Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在“tail-f”输出中添加一个过滤器,在给定匹配输入的情况下发出声音警报?_Macos_Bash_Shell_Logging_Zsh - Fatal编程技术网

Macos 如何在“tail-f”输出中添加一个过滤器,在给定匹配输入的情况下发出声音警报?

Macos 如何在“tail-f”输出中添加一个过滤器,在给定匹配输入的情况下发出声音警报?,macos,bash,shell,logging,zsh,Macos,Bash,Shell,Logging,Zsh,我需要分析特定输出的日志,如果输出中匹配了某个关键字,我需要发出echo-e“\a” 如何过滤脚本以使其发生?我也会通过ack[-grep]传递它,因此我希望在着色之前插入报警通知。我会使用sed将关键字替换为关键字\a。只要您的下游步骤不会损坏\a,该操作就应该有效 tail -f file | while read line; do echo $line | grep -qF keyword && echo -e \\a >&2; echo $line; d

我需要分析特定输出的日志,如果输出中匹配了某个关键字,我需要发出
echo-e“\a”


如何过滤脚本以使其发生?我也会通过ack[-grep]传递它,因此我希望在着色之前插入报警通知。

我会使用sed将关键字替换为关键字\a。只要您的下游步骤不会损坏\a,该操作就应该有效

tail -f file | while read line; do
  echo $line | grep -qF keyword && echo -e \\a >&2; echo $line; done

这会产生比sed更多的进程,但会通过stderr将控制字符放在终端上,这样就不太可能被下游进程修改。此外,sed的实现完全有可能缓冲其输入,直到tail生成8K左右的输出后才生成任何输出,因此您可能在数据出现后数小时或数天内收到警报。

完美的解决方案。你能给我举个简单的例子吗。我更喜欢威廉·珀塞尔的。塞德看起来更干净,但没关系。我会使用
…echo-e“\a”>&2…
,这样它就不必经过管道中的任何东西了。根据@Carl的说法,他更喜欢这个。看起来不错,能胜任。多谢。