所以我有一个字符串:
$var=server@10.200.200.20:/home/some/directory/file
我只想提取目录地址,也就是说我只想得到":"字符后面的内容:
/home/some/directory/file
谢谢。
我需要一个通用命令,因为$var变量的长度不固定,所以cut命令无法使用。
使用sed:
$ var=server@10.200.200.20:/home/some/directory/file
$ echo $var | sed 's/.*://'
/home/some/directory/file
${var#...}
和 ${var##...}
是由 POSIX 定义的。 - Adrian Frühwirth这个也可以。
echo $var | cut -f2 -d":"
为了完整起见,使用切割(cut)命令
cut -d : -f 2 <<< $var
并且只使用bash:
IFS=: read a b <<< $var ; echo $b
$var="${var#*:}"
这将从$var
中删除与*:
匹配的任何内容(即,包括第一个:
及其前面的所有内容)。如果要匹配到最后一个:
,可以使用##
代替#
。
这一切都基于要删除的部分不包含:
(IPv4地址为真,但IPv6地址不是)的假设。
这应该能解决问题:
$ echo "$var" | awk -F':' '{print $NF}'
/home/some/directory/file
awk -F: '{print $2}' <<< $var
:
字符怎么办?例如$var=server@10.200.200.20:administrators:/home/some/directory/file
。我们应该如何获取最后一个字段(即路径数据)? - Sopalajo de Arrierez