다음 명령을 사용하여 두 가지 서로 다른 필드 동작을 확인했습니다 cut
.
bash:~$ var=`cat /proc/cpuinfo | grep 'model name' | uniq | cut -d ' ' -f 3,4,5,6,7,8 `
echo $var
산출
Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz
그리고:
bash:~$ echo `cat /proc/cpuinfo | grep 'model name' | uniq` | cut -d ' ' -f 3,4,5,6,7,8
산출
: Intel(R) Core(TM) i7-3632QM CPU @
필드 번호는 동일하지만 출력이 다릅니다. 왜?
답변1
model name
이는 따옴표가 없는 `` 백틱 명령 대체가 및 문자 사이의 추가 공백을 제거하기 때문입니다 :
. grep
차이점을 직접 확인 하지 않고 출력을 확인하세요 .
echo `cat /proc/cpuinfo | grep 'model name' | uniq`
model name : Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz
그리고
cat /proc/cpuinfo | grep 'model name' | uniq
model name : Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz
# ^^ - 2 spaces rather than one
따라서 두 경우 모두 cut
숫자부터 시작하는 다른 필드가 표시됩니다. 백틱을 피하고 올바른 따옴표로 바꾸면 3
이 문제를 해결할 수 있습니다.$(..)
echo "$(cat /proc/cpuinfo | grep 'model name' | uniq)" | cut -d ' ' -f 3,4,5,6,7,8
그러나 /etc의 순차적 사용은 cat
피할 수 있으며 대신 단일 /etc를 사용할 수 있습니다.grep
awk
awk -F: '$1 ~ "model name" { print $2 }' /proc/cpuinfo
또는 더 정확하게는 위 결과에서 단일 선행 공백이 문제가 되는 경우 다음을 사용하여 제거하십시오.sub
awk -F: '$1 ~ "model name" { sub(/^[[:space:]]/ ,"" , $2); print $2 }' /proc/cpuinfo
또는 regex GNU
의 PCRE 지원 변형이 있는 경우 grep
이를 다음과 같이 사용할 수 있습니다.
grep -oP 'model name(\s+):(\s+)\K(.+)' /proc/cpuinfo