![剪切命令字段](https://linux22.com/image/141449/%E5%89%AA%E5%88%87%E5%91%BD%E4%BB%A4%E5%AD%97%E6%AE%B5.png)
我使用命令注意到这两个不同的字段行为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
但话虽如此,可以避免顺序使用cat
/ etc,并且可以使用单个 /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
或者,如果您有启用 PCRE 正则表达式GNU
的变体grep
,您可以将其用作
grep -oP 'model name(\s+):(\s+)\K(.+)' /proc/cpuinfo