Tommy has asked for the wisdom of the Perl Monks concerning the following question:
dmidecode | perl -le '$o = qr/[^\n]+\n[^\n]+/; $a = join "", <STDIN>; +$a =~ s/(Socket Designation: RAM($o)Bank($o)Current($o)Type($o)Instal +led Size: \d[^\n]+\n)/print $1/smge'
There has GOT to be a better way to get the following block of text out of dmidecode...
Socket Designation: RAM socket #0 Bank Connections: 0 Current Speed: Unknown Type: EDO DIMM Installed Size: 8192 MB (Single-bank Connection)
...while avoiding these "Not Installed" ones:
Socket Designation: RAM socket #3 Bank Connections: 3 Current Speed: Unknown Type: DIMM Installed Size: Not Installed Enabled Size: Not Installed Error Status: OK
While I try to come up with a better regex that isn't so dang ugly, do you have any suggestions on improving it?
Update
Somewhat less ugly:
dmidecode | perl -le '$o = qr/[^\n]+\n[^\n]+/; $a = join "", <STDIN>; +$a =~ s/(Socket Designation: RAM($o){4}Installed Size: \d[^\n]+\n)/pr +int $1/smge'
Update #2
OK, this seems to be working on both VMware and physical... for future reference. Thanks goes out to everyone who pitched in. This is a big step forward.
dmidecode | perl -e 'undef $/; for ( split /(?<=\n)\n+/, <> ) { print +if /RAM socket|Memory Device/ && !/(Not|No Module) Installed/ }'
|
---|
Back to
Seekers of Perl Wisdom