我需要從日志檔案中提取變數“錯誤”的值。這是一個示例行:
WARN (Periodic Recovery) IJ000906: error=15 check server.log
我需要捕獲“錯誤”的值。看著類似的答案,我想出了:
echo "WARN (Periodic Recovery) IJ000906: error=15 check server.log" | grep -P '\d (error=?)' -o
然而,它不會產生任何價值。您能否為這種情況推薦一個可行的解決方案?
uj5u.com熱心網友回復:
使用 sed
$ echo "WARN (Periodic Recovery) IJ000906: error=15 check server.log" | sed 's/.*error=\([^ ]*\).*/\1/'
15
uj5u.com熱心網友回復:
對于與 perl 兼容的正則運算式,您正在尋找“lookbehind”斷言。
要查找以字串“error=”開頭的數字,您需要:
echo "$line" | grep -o -P '(?<=error=)\d ' # => 15
見該pcresyntax(3)男子頁
uj5u.com熱心網友回復:
你可以使用這個grep:
s='WARN (Periodic Recovery) IJ000906: error=15 check server.log'
grep -oP '\berror=\K\d ' <<< "$s"
15
正則運算式詳情:
\b: 匹配詞邊界error=: 匹配error=文本\K: 重置匹配資訊\d: 匹配 1 個數字并列印
uj5u.com熱心網友回復:
我會AWK按照以下方式使用 GNU ,讓file.txt內容成為
WARN (Periodic Recovery) IJ000906: error=15 check server.log
然后
awk 'BEGIN{FPAT="error=[0-9] "}{print substr($1,7)}' file.txt
輸出
15
說明:我error=使用欄位模式 ( FPAT)通知 GNU AWK 列后跟 1 個或多個數字,對于每一行,使用substr字串函式從第 7 個字符開始列印第一個欄位。7aserror=有 6 個字符。注意:此解決方案將為error=每一行列印第一次出現的值。
(在 gawk 4.2.1 中測驗)
uj5u.com熱心網友回復:
隨著bash> = 3.0。
v='WARN (Periodic Recovery) IJ000906: error=15 check server.log'
[[ $v =~ error=([0-9] ) ]] && echo "${BASH_REMATCH[1]}"
輸出:
15
uj5u.com熱心網友回復:
第一個解決方案:使用您顯示的示例,請嘗試以下awk代碼。
awk -F'error=| check' '{print $2}' Input_file
解釋:簡單的解釋是,將所有行的欄位分隔符設定為error=OR check。然后列印行的第二個欄位,它將按照所示示例列印error=前后的值 check。
第二種解決方案:使用here的match功能awk。
awk 'match($0,/error=[^[:space:]] /){print substr($0,RSTART 6,RLENGTH-6)}' Input_file
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/372618.html
上一篇:子行程命令顯示FileNotFoundError:[Errno2]沒有這樣的檔案或目錄
下一篇:如何在魚殼CLI中禁用多行縮進?
