Text-Processing

sed + 在行中的單詞之前查找值

  • October 1, 2014

如何找到“免費”一詞之前的值?

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}'

解釋

  • 將記錄分隔符設置為,and space,因此每個字元串前面的數字本身就是一條記錄,字元串也是如此。
  • 將所有內容作為自己的記錄,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)'

引用自:https://unix.stackexchange.com/questions/158650