Bash 删除字符串后面的所有内容,但不包括该字符串
我正在使用vmrun list获取我机器上所有正在运行的vm,但我只需要目录名。目前输出为Bash 删除字符串后面的所有内容,但不包括该字符串,bash,sed,awk,Bash,Sed,Awk,我正在使用vmrun list获取我机器上所有正在运行的vm,但我只需要目录名。目前输出为 /path/to/vm.vmwarevm/vm.vmx 我想要 /path/to/vm.vmwarevm 我知道我可以用 vmrun list|sed s/vmwarevm.*// 但这也删除了vmwarevm。有没有办法做到这一点,使vmwarevm不会被删除 $ echo "/path/to/vm.vmwarevm/vm.vmx" | sed -r 's/(.*)\/.*/\1/g' /path
/path/to/vm.vmwarevm/vm.vmx
我想要
/path/to/vm.vmwarevm
我知道我可以用
vmrun list|sed s/vmwarevm.*//
但这也删除了vmwarevm。有没有办法做到这一点,使vmwarevm不会被删除
$ 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
但也存在dirname
命令:
$ dirname "/path/to/vm.vmwarevm/vm.vmx"
/path/to/vm.vmwarevm
使用
dirname
:
$ dirname "/path/to/vm.vmwarevm/vm.vmx"
/path/to/vm.vmwarevm
使用
dirname
:
$ dirname "/path/to/vm.vmwarevm/vm.vmx"
/path/to/vm.vmwarevm
其他答案很好(我可能会使用
dirname
),但这也可以通过以下方法实现:
其他答案很好(我可能会使用
dirname
),但这也可以通过以下方法实现:
使用shell内置函数(我更喜欢这种方式) 使用sed(不带-r选项)
顺便说一下,
dirname
和basename
在某些Unix系统中不起作用。使用shell内置函数(我更喜欢这种方式)
echo /path/to/vm.vmwarevm/vm.vmx | xargs dirname
使用sed(不带-r选项)
顺便说一句,
dirname
和basename
在某些Unix系统中不起作用。当我尝试此操作时,我得到sed:invalize选项--rWell,-r
是GNU sed的特定标志。也许你有一个BSD。当我尝试这个时,我得到了sed:非法选项--rWell,-r
是GNU sed的特定标志。也许你有BSD一号。这是最好的答案,我想知道为什么它只有一票。。。所有其他答案都建议您运行单独的工具(如sed
或dirname
),但这个答案为您提供了一个没有开销的纯bash解决方案。这是最好的答案,我想知道为什么它只有一票。。。所有其他答案都建议您运行单独的工具(如sed
或dirname
),但这个答案为您提供了一个没有开销的纯bash解决方案;dirname“$mypath”#失败。您应该在dirname之后添加--
。哦,顺便说一下:mypath='--my cool path/to/file';dirname“$mypath”#失败
。您应该在dirname之后添加--
。
echo /path/to/vm.vmwarevm/vm.vmx | xargs dirname