Grep之后的Grep-OSX Shell脚本



我正试图使用system_profiler命令使用OSX终端查找硬盘的名称。我正在将输出发送到一个文本文件中。这是输出的一部分。。。

Serial-ATA:
     Intel ICH8-M AHCI:
          Vendor: Intel
          Product: ICH8-M AHCI
          Link Speed: 1.5 Gigabit
          Negotiated Link Speed: 1.5 Gigabit
          Description: AHCI Version 1.10 Supported
            FUJITSU MHY2160BH:
              Capacity: 160.04 G

我要查找的部分是FUJITSU MHY2160BH:,所以我想grep第一行,它以Serial-ATA:后面的16个空格开头。由于system_profiler的输出具有可变的行数,所以我并不想使用grep -A

我试过各种各样的greps、awks和sed,但都无济于事。

有什么想法吗?干杯

使用diskutilsystem_profiler:更容易(更快)确定

diskutil info /dev/disk0 | grep 'Media Name:' | cut -f2 -d:

更多想法:

CCD_ 8价格昂贵。您通常应该只收集您关心的数据类型。例如:

system_profiler SPSerialATADataType SPPrintersDataType

运行几个较小的命令通常会比运行一个巨大的system_profiler(在我的系统上大约700k)然后重复地grepping它(这需要多次重读整个文件)更快。运行较小的命令可以完全避免昂贵的数据类型(如SPApplicationsDataType)。如果您知道自己只查看SATA信息,grep会更容易。

不过,我仍然会使用diskutil来获取这些特定信息。它可能会更快、更容易(至少在大多数情况下),并让你获得正确的驱动器。这两种技术都是在假设你想要什么驱动器。您的方法寻找第一个SATA驱动器。我的方法是查看磁盘0。正确的方法通常是查看引导驱动器(/)。您可以再次使用diskutil轻松确定:

diskutil info `diskutil list / | head -1` | grep 'Media Name:' | cut -f2 -d:
system_profiler |
awk '
   /Serial ATA/ { flag = 1 }
   flag && /^                [^ ]/ {print; exit}
'

将输出用管道传输到此:

awk '/^                / {print $1, $2; exit; }'

system_profiler命令还允许您将其输出限制为一个类别:

$ system_profiler SPSerialATADataType | grep Model: | head -1
          Model: FUJITSU MHZ2120BH G1                    
$ 

但我同意Rob Napier的观点,diskutil是更好的选择。

$ diskutil info -plist /dev/disk0 | awk '/<key>MediaName</key>/{getline;gsub(/<[^>]+>/,"");print;exit;}'
        FUJITSU MHZ2120BH G1 Media

相关内容

  • 没有找到相关文章

最新更新