Hax*_*ous 6 command-line conky cpu cpuinfo text-processing
我正在制作一个 conky 配置,我想将 CPU 型号显示为统计数据之一。为此,我需要一个仅将 CPU 名称作为字符串输出的命令,例如“Intel Core i7 7700K”。我认为两者/proc/cpuinfo和输出lscpu都有我需要的东西(我更喜欢lscpu它,因为它会稍微更有效率),但模型名称与制造商名称相差 4 个空格。所以我需要切断model name:字符串并去掉多余的空格。我也想知道怎么去掉@ (clockspeed).
Zan*_*nna 15
$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F
Run Code Online (Sandbox Code Playgroud)
-n 在我们要求之前不要打印任何东西-r 使用ERE/Model name/ 找到线 Model names/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
Run Code Online (Sandbox Code Playgroud)
如果任何地方有两个以上的空格,则不起作用,因此要无情地删除多个空格,请使用sed循环:
$ lscpu | sed -nr ':a;s/ / /;ta; /Model name/ s/.*: (.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F
Run Code Online (Sandbox Code Playgroud)
这:a;s/ / /;ta会继续处理流,直到任何地方都没有双空格。请注意,它不会接受地址,因此我们必须在选择行之前仔细阅读整个流。当我们只解析lscpu. 我们可以sed使用循环将原始命令的输出通过管道传输到另一个命令,以避免在整个流上工作:
$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p' | sed ':a;s/ / /;ta'
Intel(R) Atom(TM) CPU Z3735F
Run Code Online (Sandbox Code Playgroud)
lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
用它来得到你想要的:
lscpu | grep "Model name:" | sed -r 's/Model name:\s{1,}//g'
Run Code Online (Sandbox Code Playgroud)
结果:
Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz
Run Code Online (Sandbox Code Playgroud)
或者:
lscpu | grep "Model name" | sed -r 's/Model name:\s{1,}(.*) @ .*z\s*/\1/g'
Run Code Online (Sandbox Code Playgroud)
结果:
Intel(R) Core(TM) i5-4210U CPU
Run Code Online (Sandbox Code Playgroud)