Lutando com comandos GREP, removendo o ponto decimal corretamente

Lutando com comandos GREP, removendo o ponto decimal corretamente

Escrevi o comando shell abaixo para gerar a velocidade do clock da CPU como um número inteiro:

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

SAÍDA:

900
063

Isso ocorre porque a velocidade exata do clock é 900.063. Essencialmente, quero que o comando retorne a parte 900, mas não a parte após o decimal (0,063).

Qualquer ajuda é muito apreciada, obrigado.

Responder1

Isso pode ser mais fácil de fazer no awk:

awk -F: '/cpu MHz/ {print int($2); exit}' /proc/cpuinfo
  • -F:- dividir em:
  • /cpu MHz/nas linhas correspondentes cpu MHz, faça:
    • {print int($2); exit}'- converter o segundo campo em inteiro, imprimi-lo e sair (para obtermos apenas a primeira correspondência)

Responder2

Existem muitas possibilidades. Aqui está mais um:

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

Responder3

Abaixo está tentar

comando

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

Método estranho

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

Pitão

#!/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]

Responder4

Com grep:

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

Obtenha a linha sem o ponto e os seguintes caracteres, depois greppara os dígitos.

Se você grepsuporta expressões regulares compatíveis com Perl (PCRE):

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

Tudo antes de \Ké correspondido normalmente, mas não incluído na saída (lookbehind de comprimento variável).

informação relacionada