Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
Linux 如何在跟踪文件时使用每个GREP结果执行命令_Linux_Bash_Shell_Grep_Tail - Fatal编程技术网

Linux 如何在跟踪文件时使用每个GREP结果执行命令

Linux 如何在跟踪文件时使用每个GREP结果执行命令,linux,bash,shell,grep,tail,Linux,Bash,Shell,Grep,Tail,TL;DR:如何在将tail-f导入grep时对生成的每个grep匹配执行命令 我目前正在使用tail-f file | grep exception跟踪服务引发的所有异常。问题之一是,出现异常的行没有我需要的所有信息,但它确实包含一个标识该请求生成的所有日志行的ID 我想做的是,一旦grep匹配了一行异常,就打印出所有具有特定ID的行 使用此问题的帮助 我设法使它适用于CAT命令,如下所示: cat myFile | egrep -i "exception" | #find lines w

TL;DR:如何在将tail-f导入grep时对生成的每个grep匹配执行命令

我目前正在使用
tail-f file | grep exception
跟踪服务引发的所有异常。问题之一是,出现异常的行没有我需要的所有信息,但它确实包含一个标识该请求生成的所有日志行的
ID

我想做的是,一旦grep匹配了一行异常,就打印出所有具有特定
ID
的行

使用此问题的帮助

我设法使它适用于
CAT
命令,如下所示:

cat myFile | 
egrep -i "exception" | #find lines with exception
egrep -o "ID=[A-Z]{10}" | #for those lines, select out only the id
while read line;  do #for each id
   cat myFile | grep $line; #show all the lines that have that id
done

这可以很好地工作,并打印所有具有匹配ID的行,但是当我将
cat
更改为
tail-f
时,它不会工作,也不会打印任何内容。我做错了什么?

您遇到的问题可能是grep在看到其输出是另一个管道时正在缓冲其输出。如果等待缓冲区填满足够长的时间,您的命令最终可能会生成输出

相反,请尝试以下操作:

< myFile egrep --line-buffered -i "exception" \
| egrep --line-buffered -o "ID=[A-Z]{10}" \
| while read line; do
    cat myFile | grep "$line"
  done
如果你不知道自己在寻找什么,这显然不会对你有多大帮助-P

请注意,在Linux世界中,您使用的是Linux,其中您的手册页可能会声明“不推荐使用egrep或fgrep进行直接调用,但允许依赖它们的历史应用程序不经修改地运行。”尽管说实话,我看不到egrep和其他平台(FreeBSD、OSX)会消失不要提及贬损

   --line-buffered
          Use line buffering on output.  This can cause a performance penalty.