日志中的类似行,只想grep其中的1行

日志中的类似行,只想grep其中的1行,grep,Grep,日志会生成错误。它为1个错误生成两条非常相似的线 我想对这些错误进行grep,但只对其中一行进行grep 例如: 行为:Mar 21 15:33:04 VMP05 SMC_用户:致命ECSDPROD 5210/SUPPORT/ECSD 21/03/17 15:33:04 VMD25 diru_CHECK 0致命文件/data1/gmq6/in/29920991077061超过10分钟 行为:Mar 21 15:33:04 VMP05 SMC_用户:致命ECSDPROD 5210/SUPPORT/

日志会生成错误。它为1个错误生成两条非常相似的线 我想对这些错误进行grep,但只对其中一行进行grep

例如:

行为:Mar 21 15:33:04 VMP05 SMC_用户:致命ECSDPROD 5210/SUPPORT/ECSD 21/03/17 15:33:04 VMD25 diru_CHECK 0致命文件/data1/gmq6/in/29920991077061超过10分钟

行为:Mar 21 15:33:04 VMP05 SMC_用户:致命ECSDPROD 5210/SUPPORT/ECSD 21/03/17 15:33:04 VMD18目录检查0致命文件/data1/sftp/out/26515991064454超过10分钟

3月21日15:33:04 VMP05 SMC_用户:致命ECSDPROD 5210/SUPPORT/ECSD 21/03/17 15:33:04 VMD25目录检查0致命文件/data1/gmq6/in/29920991077061超过10分钟

3月21日15:33:04 VMP05 SMC_用户:致命ECSDPROD 5210/SUPPORT/ECSD 21/03/17 15:33:04 VMD18目录检查0致命文件/data1/sftp/out/26515991064454超过10分钟

但我只想在没有“Line is”的情况下grep这些行。我正在使用Hewlett-Packard Linux

编辑: 在tail-f中需要此grep:

    #!/usr/bin/ksh
echo "checking for last 10 fatals"
grep "FATAL ECSDPROD" /data1/log/startstop/MonitorDaemon.log|tail > /tmp/AH/linesDP.txt
grep "FATAL ECSD" /tmp/AH/linesDP.txt | grep -v "Line is"

echo "\n\n----------\n"
echo "checking for new fatals"
tail -f /data1/log/startstop/MonitorDaemon.log | grep "FATAL ECSD" | grep -v "Line is"
echo "about to exit"
exit 0
由于上面提到的尾部没有更新,脚本一直到echo“检查新的命运”,那么它就不会跟踪日志了

可能会有所帮助

tail-f/data1/log/startstop/MonitorDaemon.log | grep--缓存的行“致命ECSD”| grep-v“行是”

精化:您可以在一个命令中多次使用管道符号(
|


我想我可以通过结合使用awk和grep来解决这个问题。 我目前正在测试它,但到目前为止它还可以工作

    #!/usr/bin/ksh
echo "Checking For The Last 5 Fatals"
grep "FATAL ECSDPROD" /data1/log/startstop/MonitorDaemon.log|tail > /tmp/AH/linesDP.txt
grep "FATAL ECSD" /tmp/AH/linesDP.txt | grep -v "Line is"

echo "\n\n----------\n"
echo "Checking For New Fatals"
tail -f /data1/log/startstop/MonitorDaemon.log | awk '/FATAL ECS/' | grep -v "Line is"
echo "about to exit"
exit 0

嗨,这个不行。从技术上讲,它是这样的,但我忘记解释的是,我希望它是在一个尾巴。这样它就不会更新了。完整的行尾-f/data1/log/startstop/MonitorDaemon.log | grep“致命ECSD”| grep-v“行是”更新答案。它不起作用的原因是因为grep中内置了一个缓冲区,请参阅:grep返回以下错误:非法选项---您能提供控制台输出和输入内容的日志吗?#/usr/bin/ksh echo“检查最后5个致命事件”grep“致命ECSDPROD”/data1/log/startstop/MonitorDaemon.log | tail>/tmp/AH/linesDP.txt grep“致命ECSD”/tmp/AH/linesDP.txt | grep-v“行是”echo“\n\n------\n“echo”检查新致命事件”tail-f/data1/log/startstop/MonitorDaemon.log | grep-行缓冲的“致命ECSD”| grep-v“行是”echo“即将退出”exit 0try
tail…| stdbuf-o 0 awk'/FATAL ECSD/&&!/Line is/'
…从Hi Sundeep那里得到了想法,我得到了以下错误。/fatalschkdanp.ksh[8]:stdbuf:未找到,如前所述,我们正在使用与普通Linux不完全相同的Hewlett-Packard Linux,因此您的计算机上可能没有stdbufstdbuf…正如@Terminator_NL所回答的,应该有以下帮助返回抱歉grep:非法选项---