소수점을 올바르게 제거하기 위해 GREP 명령을 사용하려고 합니다.

소수점을 올바르게 제거하기 위해 GREP 명령을 사용하려고 합니다.

CPU 클럭 속도를 정수로 출력하기 위해 다음 쉘 명령을 작성했습니다.

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

산출:

900
063

정확한 클럭 속도가 900.063이기 때문입니다. 본질적으로 나는 명령이 소수 부분(.063)이 아닌 900 부분을 반환하기를 원합니다.

어떤 도움이라도 대단히 감사하겠습니다. 감사합니다.

답변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숫자를 가져옵니다.

grepPerl 호환 정규식(PCRE)을 지원하는 경우 :

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

이전의 모든 항목은 \K평소와 같이 일치하지만 출력에는 포함되지 않습니다(가변 길이 뒤돌아보기).

관련 정보