String 获取两个字符串之间的子字符串

String 获取两个字符串之间的子字符串,string,bash,String,Bash,我正在制作一个返回系统信息的脚本。要获取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 :

我正在制作一个返回系统信息的脚本。要获取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)
也许有一种方法可以在model name\t:和stepping之间获取文本?

一个简单的
grep
cut
可以做到这一点。如果有多个cpu,可选择添加
uniq

grep "model name" /proc/cpuinfo | cut -d: -f2 | uniq

您可以使用awk,使用冒号作为字段分隔符,测试包含“model name”的第一个字段,然后打印第二个字段:

awk -F: '$1 ~ /model name/ {print $2}' /proc/cpuinfo
塞德能做到

sed -n 's/model name[ \t]*: //p' /proc/cpuinfo
您应该知道,您可能会得到多行,并且它们可能并不都是相同的

您还应该知道,它并不总是“模型名”。我的几个旧盒子有“处理器”

所以也许:

sed -n 's/\(model name\|Processor\)[ \t]*: //p' /proc/cpuinfo | uniq

<>如果你真的想在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脚本是合适的。)

因此,我们鼓励人们展示他们为解决自己的问题所付出的努力,请通过添加您的努力编辑您的问题,然后让我们知道。