次のコマンドを使用して、2つの異なるフィールドの動作を確認しましたcut
。
bash:~$ var=`cat /proc/cpuinfo | grep 'model name' | uniq | cut -d ' ' -f 3,4,5,6,7,8 `
echo $var
出力
Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz
そして:
bash:~$ echo `cat /proc/cpuinfo | grep 'model name' | uniq` | cut -d ' ' -f 3,4,5,6,7,8
出力
: Intel(R) Core(TM) i7-3632QM CPU @
フィールド番号は同じですが、出力は異なります。なぜ?
ベストアンサー1
model name
これは、引用符のない ``バックティックコマンドの置換が文字と文字間の余分なスペースを削除するためです:
。grep
違いを直接確認せずに出力を確認してください。
echo `cat /proc/cpuinfo | grep 'model name' | uniq`
model name : Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz
そして
cat /proc/cpuinfo | grep 'model name' | uniq
model name : Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz
# ^^ - 2 spaces rather than one
したがって、どちらの場合も、cut
数字から始まる別のフィールドが表示されます。バックティックを避けて正しい引用符で置き換えることで、3
この問題を解決できます。$(..)
echo "$(cat /proc/cpuinfo | grep 'model name' | uniq)" | cut -d ' ' -f 3,4,5,6,7,8
ただし、/ etcのシーケンシャルな使用はcat
避け、代わりに単一の/ etcを使用できます。grep
awk
awk -F: '$1 ~ "model name" { print $2 }' /proc/cpuinfo
あるいは、より正確には、上記の結果で単一の先行スペースが問題になる場合は、次のように削除します。sub
awk -F: '$1 ~ "model name" { sub(/^[[:space:]]/ ,"" , $2); print $2 }' /proc/cpuinfo
または、regexGNU
のPCREサポートバリアントがある場合は、grep
次のように使用できます。
grep -oP 'model name(\s+):(\s+)\K(.+)' /proc/cpuinfo