Conky configを作成していますが、統計の1つとしてCPUモデルを表示したいと思います。これには、CPU名だけを文字列として出力するコマンドが必要です(たとえば、「Intel Core i7 7700K」)。 /proc/cpuinfo
とlscpu
からの出力の両方に必要なものがあると思います(少し効率が良いのでlscpu
を好むでしょう)が、モデル名は4スペース離れていますメーカー名。したがって、model name:
文字列を切り取り、余分なスペースを取り除く必要があります。 @ (clockspeed)
を取り除く方法も知りたいです。
$ 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
どこにも3つ以上のスペースがある場合は機能しないため、複数のスペースを容赦なく削除するには、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
これを使用して、必要なものを取得します。
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
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