[問題]Script的語法問題

看板Linux作者 (雷克斯索尼)時間8年前 (2017/09/04 12:14), 編輯推噓5(5014)
留言19則, 3人參與, 最新討論串1/1
ERROR_LOG_DATE=$(date '+%b %d %Y %H:%M' -d' -1 min') ERROR_LOG_DATE_2=$(date '+%Y%m%d%H%M%S') Alarm_NAME="VMS" Alarm_DEVIECS="VMSGW" Alarm_Local="JHO" Alarm_Status="Discover Mode" Alarm_Set="Set" ISSUE_Status="Critical" Alarm_NUMBER="DiscoverMode_000" Alarm_TIME=$(date '+%Y/%m/%d %H:%M:%S') grep "$ERROR_LOG_DATE" $FILE_NAME | grep $FILE_NAKE "SetModeToDiscover" 我在機器上開始建立Script的變數並執行sh -x 去追蹤script的結果 + ERROR_DIR=/opt/hwacom/alarm/tosplunk + FILE_NAME=/opt/dialogic/log/maintenance_SS7Red.pid-rex.log ++ date '+%b %d %Y %H:%M' '-d -1 min' + ERROR_LOG_DATE='Sep 04 2017 12:05' ++ date +%Y%m%d%H%M%S + ERROR_LOG_DATE_2=20170904120639 + Alarm_NAME=VMS + Alarm_DEVIECS=VMSGW + Alarm_Local=JHO + Alarm_Status='Discover Mode' + Alarm_Set=Set + ISSUE_Status=Critical + Alarm_NUMBER=DiscoverMode_000 ++ date '+%Y/%m/%d %H:%M:%S' + Alarm_TIME='2017/09/04 12:06:39' + grep SetModeToDiscover + grep 'Sep 04 2017 12:05' /opt/dialogic/log/maintenance_SS7Red.pid-rex.log 我想請問一下在最後兩行的結果 通常在終端的指令會打成 grep "KEYWORD" + FILE NAME | grep "KEYWORD" + FILE NAME 系統會列印出符合這一串結果的值 但是我用追蹤的去看, 好像變成是分兩次執行 我在最後的語法應該要怎麼修正才能像 grpe "KEYWORD" + FILE NAME | grep "KEYWORD" + FILE NAME 這樣的執行方式? 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.15.60.216 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1504498463.A.496.html

09/04 12:28, , 1F
你最後一行打成 FILE_NAKE
09/04 12:28, 1F

09/04 12:31, , 2F
還有第二個 grep 為什麼有兩個參數?
09/04 12:31, 2F

09/04 12:31, , 3F
你是要從 pipe grep 還是從檔案 grep ?
09/04 12:31, 3F

09/04 12:35, , 4F
我需要從檔案grep關鍵字, 需要用and方式
09/04 12:35, 4F

09/04 12:35, , 5F
我想參考板上2008的一篇文章
09/04 12:35, 5F

09/04 12:36, , 6F
是採用ps -aux | awk '/1234/ && /5678/'去操作
09/04 12:36, 6F

09/04 12:36, , 7F
我有嘗試寫進script去執行, 一直都沒有成功
09/04 12:36, 7F

09/04 13:57, , 8F
如果是 and 後面也寫錯順序不是?
09/04 13:57, 8F

09/04 13:59, , 9F
反正你要查檔案裡面有 "$ERROR_LOG_DATE" 跟 "Set....r"
09/04 13:59, 9F

09/04 14:00, , 10F
那就 grep "$ERROR_LOG_DATE" $FILE_NAME |grep "S..t"
09/04 14:00, 10F

09/04 14:00, , 11F
不就好了
09/04 14:00, 11F

09/04 14:00, , 12F
如果你要兩種東西其一存在就 grep 出來
09/04 14:00, 12F

09/04 14:02, , 13F
那就 cat $FILE_NAME|egrep "S...r|$ERROR_LOG_DATE"
09/04 14:02, 13F

09/04 14:04, , 14F
不過老實說 我看不懂你的敘述就是了
09/04 14:04, 14F

09/04 14:09, , 15F
如果有多個要比對,要 grep -e 1234 -e 5678
09/04 14:09, 15F

09/04 14:09, , 16F
但 grep 是 or ,二條件其一成立就成立,你用 awk
09/04 14:09, 16F

09/04 14:10, , 17F
看要用 /1234/ || /5678/ 或 /1234/ && /5678/ 都可
09/04 14:10, 17F

09/04 15:55, , 18F
感謝資訊的提供. 我grep的方式是and 兩個條件都要成立
09/04 15:55, 18F

09/04 15:55, , 19F
感謝提供資訊, 我可以再試試看
09/04 15:55, 19F
文章代碼(AID): #1PhDCVIM (Linux)
文章代碼(AID): #1PhDCVIM (Linux)