我正在使用vmrun list来获取我机器上所有正在运行的vms,但我只想要目录名称。目前输出是
/path/to/vm.vmwarevm/vm.vmx
我想要
/path/to/vm.vmwarevm
我知道我可以使用
vmrun list|sed s/vmwarevm.*//
但是这也删除了vmwarevm。有没有办法做到这一点,以便vmwarevm不被删除?
答案 0 :(得分:5)
使用dirname
:
$ dirname "/path/to/vm.vmwarevm/vm.vmx"
/path/to/vm.vmwarevm
答案 1 :(得分:4)
$ echo "/path/to/vm.vmwarevm/vm.vmx" | sed -r 's/(.*)\/.*/\1/g'
/path/to/vm.vmwarevm
但是还存在dirname
命令:
$ dirname "/path/to/vm.vmwarevm/vm.vmx"
/path/to/vm.vmwarevm
答案 2 :(得分:2)
其他答案都很好(我可能会使用dirname
),但这也可以通过bash parameter expansion完成:
$ p="/path/to/vm.vmwarevm/vm.vmx"
$ echo "${p%/*[!/]}"
/path/to/vm.vmwarevm
$
答案 3 :(得分:1)
使用shell内置函数(我更喜欢这种方式)
p="/path/to/vm.vmwarevm/vm.vmx"
echo ${p%/*}
使用sed(不带-r选项)
echo "/path/to/vm.vmwarevm/vm.vmx" | sed 's#/[^/]*$##'
顺便说一下,dirname
和basename
在某些Unix系统中不起作用。
答案 4 :(得分:0)
echo /path/to/vm.vmwarevm/vm.vmx | xargs dirname