我正在尝试提取给定列的内容,但是已经使用空格来格式化列,因此我没有特定的分隔符可供使用。
我正在使用的数据是以下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”
答案 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'