我使用@"df -lH | grep \"/Volumes/*\" | awk '{$1=$2=$3=$4=$5=$6=$7=$8\"\"; print $0 }'"
获取本地安装的卷路径。但如果卷名包含两个或更多空格(Leopard 1)。它(awk)从输出中删除空格。
输出:
$df -lH
Filesystem Size Used Avail Capacity Mounted on
/dev/disk0s3 81G 61G 19G 77% /
/dev/disk0s2 81G 72G 8.2G 90% /Volumes/Leopard 1 2 3
/dev/disk0s4 158G 47G 111G 30% /Volumes/Backup
$ df -lH | grep "/Volumes/*"
/dev/disk0s2 81G 72G 8.2G 90% /Volumes/Leopard 1 2 3
/dev/disk0s4 158G 47G 111G 30% /Volumes/Backup
$ df -lH | grep "/Volumes/*" | awk '{$1=$2=$3=$4=$5=""; print $0}'
/Volumes/Leopard 1 2 3
/Volumes/Backup
任何人都可以帮帮我吗?
答案 0 :(得分:3)
默认情况下awk
的输出字段分隔符是单个空格。因此,完全期望awk
命令的输出。要获得您想要的结果,您需要使用某种正则表达式,因此请尝试使用GNU awk
:
df -lH | awk '/Volumes/ { sub(/^(\S+\s+){5}/, ""); print }'
或者如果你有GNU sed
:
df -lH | sed -nr '/Volumes/s/^(\S+\s+){5}//p'
结果:
/Volumes/Leopard 1 2 3
/Volumes/Backup
编辑:
我很遗憾地看到BSD/OSX awk
doesn't support interval expressions。因此,最安全的方法是使用awk
:
df -lH | awk '/Volumes/ { sub(/^[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +/, ""); print }'
或sed
:
df -lH | sed -n '/Volumes/s/^[^ ]\+ \+[^ ]\+ \+[^ ]\+ \+[^ ]\+ \+[^ ]\+ \+[^ ]\+ \+[^ ]\+ \+//p'
这也应该是非常便携的! HTH。
编辑:
对于包含8列的Mac OSX 10.8,只需扩展正则表达式:
df -lH | awk '/Volumes/ { sub(/^[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +/, ""); print }'
或sed
:
df -lH | sed -n '/Volumes/s/^[^ ]\+ \+[^ ]\+ \+[^ ]\+ \+[^ ]\+ \+[^ ]\+ \+//p'
答案 1 :(得分:1)
使用输出比mount
更简单的df
命令和支持非贪婪匹配的perl
更容易:
:; mount | perl -pe 's/.*? on //;s/ \([^\)]*\)$//'
/
/dev
/Volumes/pro Time Machine 2
/Volumes/b
/Volumes/p
/net
/home
请注意,我在挂载点中安装了一个带空格的卷。
答案 2 :(得分:1)
df -lH | grep "/Volumes/*" | perl -pe 's/[^\%]*\%//g'
如果你想在awk中这样做:
df -lH | grep "/Volumes/*"|awk '{gsub(/[^\%]*\%/,"");print}'
答案 3 :(得分:0)
检查此命令的输出,可能有助于您解析并获取信息
mount | column -t