컷 명령 필드

컷 명령 필드

다음 명령을 사용하여 두 가지 서로 다른 필드 동작을 확인했습니다 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를 사용할 수 있습니다.grepawk

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

관련 정보