Probleme mit GREP-Befehlen, korrektes Entfernen des Dezimalpunkts

Probleme mit GREP-Befehlen, korrektes Entfernen des Dezimalpunkts

Ich habe den folgenden Shell-Befehl geschrieben, um die Taktfrequenz der CPU als Ganzzahl auszugeben:

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

AUSGABE:

900
063

Dies liegt daran, dass die genaue Taktfrequenz 900,063 beträgt. Im Wesentlichen möchte ich, dass der Befehl den Teil 900 zurückgibt, aber nicht den Teil nach der Dezimalstelle (.063).

Ich bin für jede Hilfe sehr dankbar, danke.

Antwort1

Dies lässt sich möglicherweise einfacher in awk erledigen:

awk -F: '/cpu MHz/ {print int($2); exit}' /proc/cpuinfo
  • -F:- aufgeteilt auf:
  • /cpu MHz/Führen Sie bei übereinstimmenden Zeilen cpu MHzFolgendes aus:
    • {print int($2); exit}'- Konvertieren Sie das zweite Feld in eine Ganzzahl, drucken Sie es aus und beenden Sie das Programm (sodass wir nur die erste Übereinstimmung erhalten)

Antwort2

Es gibt viele Möglichkeiten. Hier ist noch eine:

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

Antwort3

Unten finden Sie Try

Befehl

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

Awk-Methode

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]

Antwort4

Mit grep:

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

Holen Sie sich die Zeile ohne den Punkt und die folgenden Zeichen, dann grepfür die Ziffern.

Wenn Ihr grepPerl-kompatible reguläre Ausdrücke (PCRE) unterstützt:

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

Alles davor \Kwird wie üblich abgeglichen, aber nicht in die Ausgabe aufgenommen (Lookbehind mit variabler Länge).

verwandte Informationen