所以我有这个字符串:
$var=server@10.200.200.20:/home/some/directory/file
我只想提取目录地址,这意味着我只希望在“:”字符后面的位并得到:
/home/some/directory/file
感谢。
我需要一个通用命令,因此cut命令不会起作用,因为$ var变量没有固定的长度。
答案 0 :(得分:33)
使用sed:
$ var=server@10.200.200.20:/home/some/directory/file
$ echo $var | sed 's/.*://'
/home/some/directory/file
答案 1 :(得分:24)
答案 2 :(得分:10)
为了完整性,使用剪切
cut -d : -f 2 <<< $var
仅使用bash:
IFS=: read a b <<< $var ; echo $b
答案 3 :(得分:10)
这也可以。
echo $var | cut -f2 -d":"
答案 4 :(得分:7)
这应该可以解决问题:
$ echo "$var" | awk -F':' '{print $NF}'
/home/some/directory/file
答案 5 :(得分:4)
你没有说你正在使用哪个shell。如果它是兼容POSIX的,如Bash,那么参数扩展可以做你想要的:
参数扩展
...
${parameter#word}
删除最小的前缀模式
word
被扩展为生成模式。然后参数扩展导致parameter
,前缀的最小部分与删除的模式匹配。
换句话说,你可以写
$var="${var#*:}"
将删除与*:
$var
匹配的任何内容(即包括第一个:
在内的所有内容)。如果您想匹配最后一个:
,那么您可以使用##
代替#
。
这是假设要删除的部分不包含:
(IPv4地址为true,但IPv6地址无效)
答案 6 :(得分:2)
awk -F: '{print $2}' <<< $var