所以我有这个字符串:
$var=server@10.200.200.20:/home/some/directory/file
我只想提取目录地址,这意味着我只想要“:”字符之后的位并获得:
/home/some/directory/file
谢谢。
我需要一个通用命令,因此 cut 命令将不起作用,因为 $var 变量没有固定长度。
Using sed:
$ var=server@10.200.200.20:/home/some/directory/file
$ echo $var | sed 's/.*://'
/home/some/directory/file
这也行。
echo $var | cut -f2 -d":"
为了完整起见,使用 cut
cut -d : -f 2 <<< $var
并且只使用 bash:
IFS=: read a b <<< $var ; echo $b
This should do the trick:
$ echo "$var" | awk -F':' '{print $NF}'
/home/some/directory/file
你没有说你正在使用哪个外壳。如果它是 POSIX 兼容的,例如 Bash,那么参数扩展可以做你想做的事:
参数扩展
...
${parameter#word}
删除最小前缀模式。
被word
扩展以产生图案。参数扩展然后导致parameter
,前缀的最小部分与模式匹配删除。
换句话说,你可以写
$var="${var#*:}"
这将删除任何匹配*:
的$var
内容(即所有内容,包括第一个:
)。如果你想匹配到最后一个:
,那么你可以使用##
代替#
.
这一切都假设要删除的部分不包含:
(对于 IPv4 地址是正确的,但对于 IPv6 地址不是)
awk -F: '{print $2}' <<< $var