我有一個如下的 curl 輸出,我只需要 grep 來自該輸出的數字。
卷曲輸出
<h1>JVM</h1><p>Free Memory:2144.78 MB Total Memory:3072.00 MB Max Memory:3072.00 MB</p><table border="0">
grep 命令
grep -o -i 'Max Memory:.*' | awk '{ print $3 }'
輸出
MB</p><table
預期產出:3072.00
對于可用記憶體和總記憶體也是如此。
請幫忙
uj5u.com熱心網友回復:
第一個解決方案:使用您顯示的示例,請嘗試在 GNU 中進行操作grep。
grep -oP 'Total Memory:\K\S ' Input_file
或者,如果您想匹配記憶體值的確切數字,請嘗試以下操作:
grep -oP 'Total Memory:\K\d (?:\.\d )?(?=\s)' Input_file
解釋:簡單的解釋是,首先使用 GNUgrep和-o選項-P。僅列印匹配的文本并啟用 PCRE 正則運算式風格。然后在主程式grep中使用正則運算式匹配Total Memory:要搜索的\K這意味著如果找到以前的匹配項,則忘記匹配項。然后匹配\S 意味著在空間到來之前匹配所有非空間(s),這將捕獲總記憶體的值。
第二種解決方案:如果您想在輸出中獲得 3 個可用記憶體、最大值和總數的值,請嘗試以下awk代碼。用 GNU 撰寫和測驗awk。
awk -v RS='(Free Memory:|Total Memory:|Max Memory:)[^[:space:]] ' 'RT{sub(/.*:/,"",RT);print RT}' Input_file
注意:如果您的輸出不在 Input_file 中,那么您可以使用管道連接到上一個命令,然后運行這個命令。
uj5u.com熱心網友回復:
這是在一個gnu grep命令中獲取所有記憶體編號的另一個命令:
s='<h1>JVM</h1><p>Free Memory:2144.78 MB Total Memory:3072.00 MB Max Memory:3072.00 MB</p><table border="0">'
grep -oP '\w Memory:\K[\d.] ' <<< "$s"
2144.78
3072.00
3072.00
uj5u.com熱心網友回復:
您還可以使用sed從字串中提取所有必要的詳細資訊:
fm=$(sed -n 's/.*Free Memory:\([^ ]*\).*/\1/p' file)
tm=$(sed -n 's/.*Total Memory:\([^ ]*\).*/\1/p' file)
mm=$(sed -n 's/.*Max Memory:\([^ ]*\).*/\1/p' file)
查看在線演示:
#!/bin/bash
s='<h1>JVM</h1><p>Free Memory:2144.78 MB Total Memory:3072.00 MB Max Memory:3072.00 MB</p><table border="0">'
fm=$(sed -n 's/.*Free Memory:\([^ ]*\).*/\1/p' <<< "$s")
tm=$(sed -n 's/.*Total Memory:\([^ ]*\).*/\1/p' <<< "$s")
mm=$(sed -n 's/.*Max Memory:\([^ ]*\).*/\1/p' <<< "$s")
echo "fm=$fm, tm=$tm, mm=$mm"
# => fm=2144.78, tm=3072.00, mm=3072.00
詳情:
-n禁止默認行輸出.*Free Memory:\([^ ]*\).*- 匹配包含的整行.*- 任何零個或多個字符Free Memory:- 固定字串\([^ ]*\)- 第 1 組 (\1):任何零個或多個非空格字符.*- 任何零個或多個字符
/\1/- 替換與第 1 組值匹配的行p- 列印成功替換的結果。
uj5u.com熱心網友回復:
嘗試這個:
grep -o -i 'Max Memory:.*' | cut -d ':' -f 2 |awk '{ print $1 }'
uj5u.com熱心網友回復:
我會按照 GNUAWK的方式完成這項任務,讓file.txt內容成為
<h1>JVM</h1><p>Free Memory:2144.78 MB Total Memory:3072.00 MB Max Memory:3072.00 MB</p><table border="0">
然后
awk 'BEGIN{FPAT="[0-9] [.][0-9] "}{print $1,$2,$3}' file.txt
輸出
2144.78 3072.00 3072.00
說明:我通知 GNUAWK欄位是 1 位或更多位數字后跟文字.,后跟 1 位或更多位數字。我print第一,第二,第三場。免責宣告:我假設您只對.內部單一的數字感興趣。請注意,未檢測到0in 。<table border="0">隨意調整您的需求。
(在 gawk 4.2.1 中測驗)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/438995.html
上一篇:使用shell腳本運行python代碼,但它回傳'invalidsyntax'和'Nomodulenamed'錯誤
