OS X에서는 system_profiler SPHardwareDataType
다음을 출력합니다.
Hardware Overview:
Model Name: MacBook Pro
Total Number of Cores: 4
L2 Cache (per Core): 256 KB
L3 Cache: 8 MB
Memory: 8 GB
Memory
공백을 제거한 값을 얻고 싶습니다 .
이것이 내가 가진 것입니다:
system_profiler SPHardwareDataType | grep --color=never -E '^ +Memory: ' | cut -d ':' -f 2
안좋다. 공백을 유지합니다.
나는 이것으로 전환했습니다 :
system_profiler SPHardwareDataType | perl -ne 'if(/^ +Memory: (.*)$/){print $1;}'
나는 묻고 싶다:
- Perl에서 이것을 더 간결하게 만들 수 있습니까?
중괄호는 나를 짜증나게 하고 종종 잘못 입력합니다. 조건을 추가해야 하는 것도 ()
번거롭다 . 세미콜론은 번거롭습니다.
- 보다 기본적인 UNIX 도구를 사용하여 이 작업을 깔끔하게 수행할 수 있습니까? (grep/sed/awk)?
참고: 저는 제가 좋아하는 이 라인을 사용하지 않습니다..
system_profiler SPHardwareDataType | sed -Ene 's/^ +Memory: (.*)$/\1/g p'
확장된 정규 표현식(일부 플랫폼에서는 가능합니까?)과 라인에서 작동한다는 것을 알고 있기 때문에 -E
명시적으로 인쇄하지 않는 한 출력을 억제합니다. 이것은 일반 정규 표현식입니다. 그리고 a 뒤의 명령은 다음과 같습니다. 일치하는 줄에서만 실행됩니다. .그 자체가 동작이라는 사실이 혼란스럽습니다..그래서 그 전에 동작이 필요하기를 바랍니다..이상한 점은 명령을 실행하기 위한 조건으로 match를 대체하고 사용할 수 있다는 것입니다..그건 라인이 정확히 맞나요?-r
sed
-n
p
s//g
substitute
match
s//g
p
;
답변1
Awk를 사용하면 다음과 같이 간단해집니다.
system_profiler SPHardwareDataType | awk -F': ' '/Memory:/{print $2}'
답변2
이것이 Perl에서 정말로 필요한 전부입니다:
system_profiler SPHardwareDataType | perl -nle '/ry:\s*(.*)/ && print $1'
기타 옵션:
system_profiler SPHardwareDataType | /bin/grep Me | gawk '{print $2,$3}'
/bin/grep을 사용하면 에 정의된 별칭이 제거
--color=never
됩니다 (적어도 대부분의 Linux 배포판 에서는 마찬가지이며 OSX에서도 마찬가지일 것으로 추측됩니다).grep
grep --color=auto
/etc/bash.bashrc
system_profiler SPHardwareDataType | /bin/grep Me | /bin/egrep -o '[1-9]+.+'
이로
-o
인해 grep은 일치하는 문자만 인쇄합니다.system_profiler SPHardwareDataType | tail -n 1 | cut -d ' ' -f 4,5
system_profiler SPHardwareDataType | tail -n 1 | sed 's/.*: //g'
답변3
system_profiler SPHardwareDataType | sed -n 's/^ *Memory: //p'
p
s
이는 command 가 아닌 명령 ( 과 같은 g
) 의 플래그 p
이며 대체가 발생하면 패턴 공간을 인쇄한다는 의미입니다. g
패턴은 한 번만 일치할 수 있으므로 여기서는 필요하지 않습니다 .