GREPコマンドで小数点を正しく削除するのに苦労しています

GREPコマンドで小数点を正しく削除するのに苦労しています

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 番目のフィールドを整数に変換し、それを印刷して終了します (最初の一致のみを取得します)

答え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数字を取得します。

grepPerl 互換正規表現 (PCRE) をサポートしている場合:

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

の前のすべては\K通常どおり一致しますが、出力には含まれません (可変長の後読み)。

関連情報