Text-Processing
sed + 在行中的單詞之前查找值
如何找到“免費”一詞之前的值?
top -n1 | grep Mem Mem: 2054968k av, 2034120k used, 20848k free, 0k shrd, 186768k buff
首先我試過
top -n1 | grep Mem | awk '{print $7}'
但這並不好,因為自由值(此處為 20848k)可以位於不同的欄位中。有時是第 6 場,有時是第 7 場,依此類推。
我需要它才能在 Linux 和 Solaris 上工作。
awk -v RS="[, ]" '/free/{print a}{a=$0}'
解釋
- 將記錄分隔符設置為
,
andspace
,因此每個字元串前面的數字本身就是一條記錄,字元串也是如此。- 將所有內容作為自己的記錄,awk 將逐項處理
- 對於之前的所有記錄
free
都會忽略,{print a}
因為條件不匹配,它會跳轉到{a=$0}
將目前處理的記錄儲存在變數中a
- 一旦
/free/
匹配,awk 將{print a}
在a
匹配之前包含記錄的位置
$ top -bn1 | grep free KiB Mem: 8117084 total, 6578888 used, 1538196 free, 302216 buffers KiB Swap: 8060924 total, 26004 used, 8034920 free, 1564856 cached $ top -bn1 | grep -oP '\S+(?=\s+free)' 1544132 8034920
需要 GNU grep,但你已經標記了“linux”,所以你沒問題
對於“記憶體”:
top -bn1 | grep -oP 'Mem.*\s\K\S+(?=\s+free)'