bash:按列分割命令输出而没有特定的分隔符

时间:2013-01-14 06:00:46

标签: macos bash

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

我正在使用的数据是以下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”

3 个答案:

答案 0 :(得分:4)

您应该使用diskutil list -plist并解析属性列表。人类可读的输出并不是机器可读的,并且可能看起来与您期望的不同(列边界可以移动以容纳长输出或宽的终端窗口等)。

答案 1 :(得分:0)

如果我理解正确,你需要打印从第3到第3的单词。如果是这样,以下awk将会:

gawk '{disk=""; for (i = 3; i <= NF-3; i++){disk=disk $i " "};print disk}'

答案 2 :(得分:0)

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

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

或者只是正则表达式:

diskutil list | sed -En 's/^[ 0-9]+: +(Apple[^ ]+).+/\1/p'