OS Xでは、system_profiler SPHardwareDataType
以下を出力します。
Hardware Overview:
Model Name: MacBook Pro
Total Number of Cores: 4
L2 Cache (per Core): 256 KB
L3 Cache: 8 MB
Memory: 8 GB
Memory
スペースを削除した値を取得したいです。
これが私が持っているものです:
system_profiler SPHardwareDataType | grep --color=never -E '^ +Memory: ' | cut -d ':' -f 2
悪い。スペースを保持します。
私はこれに切り替えました:
system_profiler SPHardwareDataType | perl -ne 'if(/^ +Memory: (.*)$/){print $1;}'
私は尋ねたい:
- Perlでこれをより簡潔にすることはできますか?
中かっこは私を迷惑させ、しばしば間違って入力します。条件を追加する必要があるのも()
面倒です。セミコロンは面倒です。
- より基本的なUNIXツールを使用してこれをきちんと実行できますか? (grep/sed/awk)?
注:私は私の好きなこの行を使用しません。
system_profiler SPHardwareDataType | sed -Ene 's/^ +Memory: (.*)$/\1/g p'
拡張正規表現(一部のプラットフォームでは可能ですか?)と行で動作することがわかっているため、-E
明示的に印刷しない限り出力を抑制します。これは正規正規表現です。そしてaの後のコマンドは次のようになります。一致する行でのみ実行されます。 .それ自体が動作であるという事実は混乱しています。 ?-r
sed
-n
p
s//g
substitute
match
s//g
p
;
答え1
Awkを使用すると、次のように簡単になります。
system_profiler SPHardwareDataType | awk -F': ' '/Memory:/{print $2}'
答え2
これはPerlで本当に必要なすべてです:
system_profiler SPHardwareDataType | perl -nle '/ry:\s*(.*)/ && print $1'
その他のオプション:
system_profiler SPHardwareDataType | /bin/grep Me | gawk '{print $2,$3}'
/ bin / grepを使用すると、で定義されたエイリアスが削除され
--color=never
ます(少なくともほとんどのLinuxディストリビューションでは同様であり、OSXでも同様であると推測されます)。grep
grep --color=auto
/etc/bash.bashrc
system_profiler SPHardwareDataType | /bin/grep Me | /bin/egrep -o '[1-9]+.+'
これ
-o
により、grepは一致する文字のみを印刷します。system_profiler SPHardwareDataType | tail -n 1 | cut -d ' ' -f 4,5
system_profiler SPHardwareDataType | tail -n 1 | sed 's/.*: //g'
答え3
system_profiler SPHardwareDataType | sed -n 's/^ *Memory: //p'
p
s
これはコマンドではなくコマンド(のようなg
)のフラグp
であり、置換が発生するとパターンスペースを印刷することを意味します。g
パターンは一度だけ一致できるため、ここでは必要ありません。