我在bash腳本中使用df
命令:如何讓GREP只選擇數值?
df . -B MB | tail -1 | awk {'print $4'} | grep .[0-9]*
此腳本返回:
99%
但我只需要數(使下比較)。 如果我使用正則表達式grep
不點:
df . -B MB | tail -1 | awk {'print $4'} | grep .[0-9]*
我什麼也得不到。 如何解決?
我在bash腳本中使用df
命令:如何讓GREP只選擇數值?
df . -B MB | tail -1 | awk {'print $4'} | grep .[0-9]*
此腳本返回:
99%
但我只需要數(使下比較)。 如果我使用正則表達式grep
不點:
df . -B MB | tail -1 | awk {'print $4'} | grep .[0-9]*
我什麼也得不到。 如何解決?
如果你嘗試:
echo "99%" |grep -o '[0-9]*'
它返回:
99
下面是對-o
(或--only-matching
標誌)的細節從grep manual page工作。
僅打印匹配行的匹配(非空白)部分,每個這樣的部分位於單獨的輸出行中。輸出行使用與輸入相同的分隔符,如果還使用了-z(--null-data),則分隔符爲空字節(請參閱Other Options)。
grep
將打印任何線匹配您提供的模式。如果你只想打印匹配模式行的一部分,您可以通過-o選項:
-o,--only匹配 只打印匹配的(非空的)部分匹配線,每個這樣的部分在一個單獨的輸出線上。
像這樣:
echo 'Here is a line mentioning 99% somewhere' | grep -o '[0-9]+'
這不適用於所有版本的grep。 您將需要-P或-E 因此,這將工作 回聲'這是一條提到99%某處的路線'| 'grep -oP'[0-9] +' 或 echo'這是一條提到99%某處的路線'| grep -oP'[0-9] +' –
如何:
df . -B MB | tail -1 | awk {'print $4'} | cut -d'%' -f1
沒有必要在這裏使用的grep,試試這個:
df . -B MB | tail -1 | awk {'print substr($5, 1, length($5)-1)'}
function getPercentUsed() {
$sys = system("df -h /dev/sda6 --output=pcent | grep -o '[0-9]*'", $val);
return $val[0];
}
不要使用比必要的更多的命令,離開尾巴,grep和切。你可以只用(簡單的)這樣做的awk
PS:給予塊大小連接打印只去persentage是有點傻;-)所以也放棄使用「-B MB」
df。| awk的-F '[多個領域分隔符]' '$ NF == 「末場必須恰好 - >安裝patition」{$打印(NF-從去年場數)}'
在你的情況下,使用方法:
df . |awk -F'[ %]' '$NF=="/" {print $(NF-2)}'
輸出:
如果你想顯示百分比符號,你可以離開了-F'[%]的路程和打印領域將移動1場進一步回
df . |awk '$NF=="/" {print $(NF-1)}'
輸出:81%
您也可以使用別名'\ d'就像'echo「99%」| grep -o'\ d *'' –
你確定@FabSa嗎?你有沒有做過測試? AFAK,grep默認使用BRE .. – Kent
它適用於我(是在OsX上),但也許你需要「extended-regexp」(帶'-E') –