如何在Bash中通过斜杠分割字符串

33

示例字符串 :

/gasg/string

预期结果 : string

需要移除的字符: 包括 "/" 符号在内的两个斜杠之间所有的字符


在“/”符号之间。如果只有一个斜杠或根本没有斜杠,或者第一个斜杠之前的文本会发生什么? - Mark Byers
3个回答

46

也可以使用awk - 以斜杠作为分隔符并打印最后一个字段。

echo "/gas/string" | awk -F/ '{print $NF}'

或者截取字符串 - 但只有在您需要剥离相同数量的目录时才有效

echo "/gasg/string" |cut -d/ -f 3

1
你能详细说明为什么要使用“-f 3”吗? - mrgloom
1
@mrgloom -f 是字段 ID。例如,3 是第三个字段(索引 2)。如果您使用了“-f 2”,则结果是 gasg。对于“-f 1”,它只是一个空字符串,因为在第一个斜杠之前没有任何内容。 - AmazingTurtle

35

使用 sed

$ echo "/gasg/string" | sed -e 's/\/.*\///g'
string

使用内置的Bash字符串操作:

$ s="/gag/string"
$ echo "${s##/*/}"
string

你的字符串看起来和Unix路径名完全相同。因此,你也可以使用basename实用程序 - 它返回给定Unix路径名的最后一部分:

$ basename "/gag/string"
string
# It works with relative paths and spaces too:
$ basename "gag/fas das/string bla bla"
string bla bla

参数扩展中的第一个斜杠不是必需的。在这种情况下,赋值时需要引号,但出于习惯,扩展时也应该使用引号。 - Dennis Williamson
我同意第一个“/”不是必需的,但我添加它是为了说明这一点。 - Hristo Iliev
你的字符串看起来就像Unix路径名。- 是的,我的意图是获取给定路径名的最后一个分区,并且使用basename就像“find -exec basename {} ;”一样,这对我来说非常棒!谢谢你的提示。 - user1306777
请注意,为了使字符串操作在URI/URL上正常工作(例如ftp:///documents/string.txt),您必须删除第一个斜杠。 - Glutanimate

11

你可以使用Bash字符串操作。

a='/gasg/string'
echo ${a##*/}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接