Проблемы с командами GREP, правильное удаление десятичной точки

Проблемы с командами GREP, правильное удаление десятичной точки

Я написал команду оболочки ниже для вывода тактовой частоты процессора в виде целого числа:

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

питон

#!/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сопоставляется как обычно, но не включается в вывод (обратная проверка переменной длины).

Связанный контент