2

cat の出力を/proc/cpuinfobash スクリプト内の変数に格納するだけです。

/proc/cpuinfo:

processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 58 model name : Intel(R) Core(TM) i5-3230M CPU @ 2.80GHz stepping : 9 cpu MHz : 2562.759 cache size : 6144 KB fpu : yes fpu_exception : yes cpuid level : 5 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc up rep_good nopl pni monitor ssse3 lahf_lm bogomips : 5125.51 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management:

情報をテキスト ファイルに cat して grep すると、次のようになります。

grep -P '(?<=model name\s:\s)[\w ()-]*(?=CPU)' infotext.txt

私は一致します:

model name  : **Intel(R) Core(TM) i5-3230M** CPU @ 2.60GHz

ただし、これを bash スクリプト内でテストすると、一致しません。

regex='(?<=model name\s:\s).*(?=CPU)'

if [[ $line =~ $regex ]]; then
     modelName=${BASH_REMATCH[1]}
fi

これは、/proc/cpuinfo の出力をテキスト ファイルに cat することと、単純に変数に格納することの違いと関係があるのcpuInfo=$(cat /proc/cpuinfo)でしょうか?

そうでない場合、bash 内での正規表現のフォーマットが問題を引き起こしていますか? (「モデル名:」と「CPU」の先読み/後読みを行う別の方法が必要になる場合があります)。

4

2 に答える 2

1

正規表現は引用符では機能しませんが、変数を使用することは可能です。また、[\w] はサポートされていないようです。正規表現を変更すると、次の結果が得られます。

re='model name\s:\s(.*?)CPU'
[[ $line =~ $re ]]
echo "${BASH_REMATCH[1]}"
于 2013-10-02T20:41:20.177 に答える