我正在制作一个返回系统信息的脚本。要获取CPU名称,我正在使用cat /proc/cpuinfo
,并获得以下输出
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
stepping : 1
microcode : 0xb000037
cpu MHz : 2299.853
cache size : 46080 KB
physical id : 0
如何提取型号名称? (英特尔(R)至强(R)CPU E5-2686 v4 @ 2.30GHz) 也许有一种方法可以在模型名称\ t:和步进之间获取文本?
答案 0 :(得分:0)
带有grep
的简单cut
可以做到。如果有多个CPU,可以选择添加uniq
grep "model name" /proc/cpuinfo | cut -d: -f2 | uniq
答案 1 :(得分:0)
您可以使用awk,使用冒号作为字段分隔符,测试包含“模型名称”的第一个字段,然后打印第二个字段:
awk -F: '$1 ~ /model name/ {print $2}' /proc/cpuinfo
答案 2 :(得分:0)
sed可以做到。
sed -n 's/model name[ \t]*: //p' /proc/cpuinfo
您应该注意,您可能会得到多行,而且它们可能并不完全相同。
您还应该知道,它并不总是“型号名称”。我的几个较旧的盒子都有“处理器”。
所以也许:
sed -n 's/\(model name\|Processor\)[ \t]*: //p' /proc/cpuinfo | uniq
答案 3 :(得分:0)
如果您真的想完全用bash来完成它,切开字符串,请考虑一下:
#!/bin/bash
a="$( cat /proc/cpuinfo )"
b="${a//$'\n'/ }"
b="${b//$'\t'/ }"
b="${b#*model name : }"
b="${b%%stepping *}"
echo "$b"
$ {b#* text}从b中删除与“ text”匹配的最短前缀。 $ {b %% text }从b中删除匹配“ text *”的最长前缀。 由于“ *”似乎无法跨行使用,因此我首先将换行符和制表符减少为空格。
(我认为直接使用bash脚本是正确的答案。)