如何获取我的处理器的型号名称?

如何获取我的处理器的型号名称?

我正在制作一个 conky 配置,我想将 CPU 型号显示为统计数据之一。为此,我需要一个命令,仅将 CPU 名称输出为字符串,例如“Intel Core i7 7700K”。我认为 和 的/proc/cpuinfo输出lscpu都有我需要的(我更喜欢它,lscpu因为它会稍微更高效),但型号名称与制造商名称相距 4 个空格。所以我需要截断字符串model name:并删除多余的空格。我还想知道如何删除@ (clockspeed)

答案1

$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU  Z3735F

笔记

  • -n在我们要求之前不要打印任何内容
  • -r使用 ERE
  • /Model name/找到Model name
  • s/old/new/old用。。。来代替new
  • .*:\s*冒号、冒号之前的任何内容以及任意数量的水平空格
  • (.*) @保存任意数量的字符' @'
  • \1参考已保存的模式
  • p仅打印我们编辑的行

要删除双空格,您可以执行额外的s命令:

$ lscpu | sed -nr '/Model name/ s/  / /g; s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F

如果任何地方有两个以上的空格,则此方法不起作用,因此要不断删除多个空格,请使用循环sed

$ lscpu | sed -nr ':a;s/  / /;ta; /Model name/ s/.*: (.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F 

:a;s/ / /;ta会继续处理流,直到任何地方都没有双空格。请注意,它不会接受地址,因此我们必须仔细检查整个流,然后再选择行。当我们仅解析 的输出时,这不会花费太多时间lscpu,但在大型文件或多个文件上,它可能会变得非常慢。我们可以使用循环将原始命令的输出传送到另一个命令,sed以避免处理整个流:

$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p' | sed ':a;s/  / /;ta'
Intel(R) Atom(TM) CPU Z3735F

答案2

lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
  • lscpu获取 CPU 信息
  • grep 'Model name'提取包含 CPU 名称的行。
  • cut -f 2 -d ":"删除 之前的部分行。因此它将从输出中:删除部分“ ”。Model name:
  • awk '{$1=$1}1'删除行首的空格。

示例输出

$ lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
Intel(R) Pentium(R) CPU N3520 @ 2.16GHz

答案3

使用它来获得你想要的东西:

lscpu | grep "Model name:" | sed -r 's/Model name:\s{1,}//g'

结果:

Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz

或者:

lscpu | grep "Model name" | sed -r 's/Model name:\s{1,}(.*) @ .*z\s*/\1/g'

结果:

Intel(R) Core(TM) i5-4210U CPU

相关内容