努力使用GREP指令,正確刪除小數點

努力使用GREP指令,正確刪除小數點

我編寫了下面的 shell 命令來以整數形式輸出 CPU 的時脈速度:

grep -m 1 'cpu MHz' /proc/cpuinfo | grep -o -E '[0-9]+'

輸出:

900
063

這是因為確切的時脈速度是 900.063。本質上,我希望命令返回 900 部分,而不是小數點後的部分 (.063)。

非常感謝任何幫助,謝謝。

答案1

在 awk 中這可能更容易完成:

awk -F: '/cpu MHz/ {print int($2); exit}' /proc/cpuinfo
  • -F:- 分裂:
  • /cpu MHz/在符合的行上cpu MHz,執行以下操作:
    • {print int($2); exit}'- 將第二個欄位轉換為整數,列印它並退出(所以我們只得到第一個符合項)

答案2

有很多可能性。這是另一個:

grep -m 1 'cpu MHz' /proc/cpuinfo | cut -f2 -d: | cut -f1 -d.

答案3

下面是嘗試

命令

sed -n '/cpu MHz/s/.*://p' /proc/cpuinfo | sed "s/\..*//g"

awk方法

awk  -F ":" '/cpu MHz/{gsub(/\..*/,"",$NF);print $NF}' /proc/cpuinfo

Python

#!/usr/bin/python
import re
k=re.compile(r'cpu MHz')
m=open('/proc/cpuinfo','r')
for i in m:
    if re.search(k,i):
        print i.split(":")[-1].split(".")[0]

答案4

grep

grep -om1 'cpu MHz[^.]*' /proc/cpuinfo | grep -o '[[:digit:]]*'

取得不帶點和以下字元的行,然後grep取得數字。

如果您grep支援 Perl 相容的正規表示式 (PCRE):

grep -oPm1 'cpu MHz.* \K[[:digit:]]+' /proc/cpuinfo

之前的所有內容\K都會照常匹配,但不包含在輸出中(可變長度後向查找)。

相關內容