努力使用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都会照常匹配,但不包含在输出中(可变长度后向查找)。

相关内容