How do I get the model name of my processor?
Solution 1
$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F
Notes
-n
don't print anything until we ask for it-r
use ERE/Model name/
find the line withModel name
s/old/new/
replaceold
withnew
.*:\s*
anything before a colon, a colon, and any amount of horizontal space(.*) @
save any number of characters before' @'
\1
reference to saved patternp
print only the line we edited
To get rid of double spaces, you can do an extra s
command:
$ lscpu | sed -nr '/Model name/ s/ / /g; s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F
The doesn't work if there are more than two spaces anywhere, so to delete multiple spaces relentlessly, use a sed
loop:
$ lscpu | sed -nr ':a;s/ / /;ta; /Model name/ s/.*: (.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F
This :a;s/ / /;ta
keeps on processing the stream until there are no double spaces anywhere. Notice that it won't take an address, so we had to chew through the whole stream before selecting the line. This won't take a noticeable amount of time when we're only parsing the output of lscpu
, but on a huge file or on multiple files, it could get pretty slow. We could pipe the output from the original command to another sed
with the loop instead to avoid working on the whole stream:
$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p' | sed ':a;s/ / /;ta'
Intel(R) Atom(TM) CPU Z3735F
Solution 2
lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
lscpu
To get the CPU informationgrep 'Model name'
To extract the line containing CPU name.cut -f 2 -d ":"
To remove part of the line before:
. So it will remove the part "Model name:
" from the output.awk '{$1=$1}1'
To remove the space from the beginning of a line.
Sample Output
$ lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
Intel(R) Pentium(R) CPU N3520 @ 2.16GHz
Solution 3
Use this to get what you want:
lscpu | grep "Model name:" | sed -r 's/Model name:\s{1,}//g'
Result:
Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz
Or:
lscpu | grep "Model name" | sed -r 's/Model name:\s{1,}(.*) @ .*z\s*/\1/g'
Result:
Intel(R) Core(TM) i5-4210U CPU
Related videos on Youtube
Haxalicious
Updated on September 18, 2022Comments
-
Haxalicious over 1 year
I am making a conky config and I want to display the CPU model as one of the stats. For this, I need a command that outputs just the CPU name as a string, for example, "Intel Core i7 7700K". I think both
/proc/cpuinfo
and the output fromlscpu
have what I need (I would preferlscpu
because it would be slightly more efficient), but the model name is 4 spaces too far away from the manufacturer name. So I would need to cut off themodel name:
string and get rid of the extra spaces. I would also like to know how to get rid of the@ (clockspeed)
. -
Haxalicious over 6 yearsBut that doesn't get rid of the "Model name:" at the front.
-
George Udosen over 6 yearsPlease post an example of what you want, sorry for the mix up!
-
George Udosen over 6 yearsDoing from mobile so test and let me know
-
Haxalicious over 6 yearsThis works, but there is still extra spaces.
-
Zanna over 6 years@Haxalicious sorry I was distracted by something. I edited my original version to trim the trailing space, and added a version that removes all double spaces