0

我正在尝试提取给定列的内容,但已使用空格来格式化列,因此我没有可使用的特定分隔符。

我正在使用的数据是以下 OS X 命令的结果:

diskutil list | grep 'Apple'

示例输出:

   2:                  Apple_HFS Macintosh SSD           511.8 GB   disk0s2
   2:                  Apple_HFS External                79.7 GB    disk1s2

我要提取的列是磁盘名称,即“Macintosh SSD”和“External”

4

3 回答 3

4

您应该diskutil list -plist改为使用和解析属性列表。人类可读的输出并不意味着机器可读,并且可能看起来与您预期的不同(列边界可能会移动以适应长输出或宽终端窗口等)。

于 2013-01-14T06:10:58.207 回答
0

如果我理解正确,您需要打印从第 3 到第 N-3 的单词。如果是这样,以下 awk 将执行以下操作:

gawk '{disk=""; for (i = 3; i <= NF-3; i++){disk=disk $i " "};print disk}'
于 2013-01-14T09:35:10.403 回答
0

您还可以使用tr -s ' '折叠(挤压)空间:

diskutil list | tr -s ' ' | cut -d ' ' -f 3 | grep Apple

或者只是正则表达式:

diskutil list | sed -En 's/^[ 0-9]+: +(Apple[^ ]+).+/\1/p'
于 2013-01-14T11:48:06.383 回答