需要有关 shell scipt 的一些帮助(使用 grep 命令) [英] Need some help on shell scipt (using grep command)

查看:40
本文介绍了需要有关 shell scipt 的一些帮助(使用 grep 命令)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个日志文件,我正在尝试编写一个 shell 脚本来在文件中的多行中查找多个字符串.

I have a log file and I am trying to write a shell script to find multiple strings in a file on multiple lines.

例如,如果我在日志中同时看到短语class=com.comcast.parker.GetCurrentAudioLanguageResponse"和status:OK",我应该打印 getAudioLanguage SUCCESSFUL 否则 getAudioLanguage FAILED.所以我的 shell 脚本是这样的:

For example if I see the phrases "class=com.comcast.parker.GetCurrentAudioLanguageResponse" and "status:OK" together in the logs, I should print getAudioLanguage SUCCESSFUL else getAudioLanguage FAILED. So my shell script goes like this:

脚本文件:

logfile=$1

if grep "{\"class\":\"com.comcast.parker.GetCurrentAudioLanguageResponse\"" jags.txt | grep "{\"status\":\"OK\"" | wc -l ; then
    echo "getAudioLanguage SUCCESSFUL"
fi
if grep "{\"class\":\"com.comcast.parker.GetCurrentAudioLanguageResponse\"" $logfile | grep -q "GENERAL_ERROR" | wc -l ; then
    echo "getAudioLanguage FAILED"
fi

在日志中,我得到的状态为 GENERAL_ERROR,所以它应该打印 FAILED,但输出显示为 getAudioLanguage SUCCESSFUL ..

In the logs, I get status as GENERAL_ERROR, so it should print FAILED, but the output shows as getAudioLanguage SUCCESSFUL ..

对此有什么帮助吗?

日志文件:

160125-11:11:28.442500 [mod=SYS, lvl=INFO] [tid=2332] ======= Message is onRPCCall ======>
160125-11:11:28.442614 [mod=SYS, lvl=INFO] [tid=2332] Entering onRPCCallEvent for request ---> getAudioLanguage
160125-11:11:28.442845 [mod=SYS, lvl=INFO] [tid=2332] Received json request = {"event":1,"handler":1,"name":"onRPCCall","params":{"callGUID":"d75a5bab-6b29-4ab4-9f7e-3cf32d4a05b1","callParams":[{"getAudioLanguage":{}}],"class":"com.comcast.xre.events.XRERPCCallInfo","destinationSessionGUID":"ab00ebea-5f63-4619-9877-273a2bceea1d","method":"getAudioLanguage","sourceSessionGUID":"ab00ebea-5f63-4619-9877-273a2bceea1d"},"phase":"STANDARD","source":1}

160125-11:11:28.442920 [mod=SYS, lvl=INFO] [tid=2332] GetCurrentAudioLanguage : Entered
160125-11:11:28.442968 [mod=SYS, lvl=INFO] [tid=2332] pMainPlayer is NULL.
160125-11:11:28.443012 [mod=SYS, lvl=INFO] [tid=2332] getAudioLanguage: Get Audio Language returned ��v`>       T�=     T0~�t
160125-11:11:28.443676 [mod=SYS, lvl=INFO] [tid=2332] ====== Response sending is {"appId":1,"command":"CALL","commandIndex":5,"method":"generateAppEvent","params":[{"class":"com.comcast.xre.events.XREOutgoingEvent","name":"onRPCReturn","params":{"callGUID":"d75a5bab-6b29-4ab4-9f7e-3cf32d4a05b1","class":"com.comcast.xre.events.XRERPCReturnInfo","destinationSessionGUID":"ab00ebea-5f63-4619-9877-273a2bceea1d","method":"getAudioLanguage","returnVal":{"class":"com.comcast.parker.GetCurrentAudioLanguageResponse","status":"GENERAL_ERROR","statusMessage":"Getting Current Audio Language was unsuccessful."},"sourceSessionGUID":"ab00ebea-5f63-4619-9877-273a2bceea1d"}},"ab00ebea-5f63-4619-9877-273a2bceea1d"],"targetId":1,"targetPath":"","timestamp":0}

推荐答案

您可以使用单个 awk 而不是多个 grep 来做到这一点:

Rather than multiple grep you can use a single awk to do this:

awk '/{"class":"com\.comcast\.parker\.GetCurrentAudioLanguageResponse"/{
   exit ($0 !~ /"status":"GENERAL_ERROR"/)}' file && echo "getAudioLanguage FAILED"

awk '/{"class":"com\.comcast\.parker\.GetCurrentAudioLanguageResponse"/{
   exit ($0 !~ /"status":"OK"/)}' file && echo "getAudioLanguage SUCCESSFUL"

这篇关于需要有关 shell scipt 的一些帮助(使用 grep 命令)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆