can*_*cse 27 unix string shell awk sed
所以我有这个字符串:
$var=server@10.200.200.20:/home/some/directory/file
我只想提取目录地址,这意味着我只想要在":"字符后面的位并得到:
/home/some/directory/file
谢谢.
我需要一个通用命令,因此cut命令不会工作,因为$ var变量没有固定的长度.
fal*_*tru 36
使用sed:
$ var=server@10.200.200.20:/home/some/directory/file
$ echo $var | sed 's/.*://'
/home/some/directory/file
pot*_*ong 26
这可能对你有用:
echo ${var#*:}
cht*_*mon 10
为了完整性,使用切割
cut -d : -f 2 <<< $var
并且只使用bash:
IFS=: read a b <<< $var ; echo $b
这应该做的伎俩:
$ echo "$var" | awk -F':' '{print $NF}'
/home/some/directory/file
你没有说你使用的是哪个外壳。如果它是 POSIX 兼容的,例如 Bash,那么参数扩展可以做你想做的:
参数扩展
...
${parameter#word}删除最小前缀模式。
将word被扩展,以产生一个模式。参数扩展然后导致parameter,与删除模式匹配的前缀的最小部分。
换句话说,你可以写
$var="${var#*:}"
这将从中删除任何匹配*:的内容$var(即,直到并包括第一个:)。如果您想匹配到最后一个:,那么您可以使用##代替#。
这一切都假设要删除的部分不包含:(适用于 IPv4 地址,但不适用于 IPv6 地址)