我有一个像这样的字符串
//ABC/REC/TLC/SC-prod/1f9/20/00000000957481f9-08d035805a5c94bf
并希望获得
的最后一部分00000000957481f9-08d035805a5c94bf
答案 0 :(得分:17)
假设你有
text="//ABC/REC/TLC/SC-prod/1f9/20/00000000957481f9-08d035805a5c94bf"
如果您知道位置,即在这种情况下是第9位,您可以使用
echo "$text" | cut -d'/' -f9
但是,如果这是动态的并且您希望以“/”分割,则更安全:
echo "${text##*/}"
这将删除从“/”开始到最后一次出现的所有内容,并且应该是最短的形式。
有关详细信息,请参阅:Bash Reference manual
有关cut
的详情,请参阅:cut man page
答案 1 :(得分:6)
工具basename
正是这样做的:
$ basename //ABC/REC/TLC/SC-prod/1f9/20/00000000957481f9-08d035805a5c94bf
00000000957481f9-08d035805a5c94bf
答案 2 :(得分:2)
我会使用bash
字符串函数:
$ string="//ABC/REC/TLC/SC-prod/1f9/20/00000000957481f9-08d035805a5c94bf"
$ echo "${string##*/}"
00000000957481f9-08d035805a5c94bf
但以下是一些其他选项:
$ awk -F'/' '$0=$NF' <<< "$string"
00000000957481f9-08d035805a5c94bf
$ sed 's#.*/##g' <<< "$string"
00000000957481f9-08d035805a5c94bf
注意: <<<
是herestring
符号。他们不创建一个子shell,但是,它们 NOT 可移植到POSIX sh(由诸如ash或dash之类的shell实现)。
答案 3 :(得分:1)
您可以使用此BASH正则表达式:
s='//ABC/REC/TLC/SC-prod/1f9/20/00000000957481f9-08d035805a5c94bf'
[[ "$s" =~ [^/]+$ ]] && echo "${BASH_REMATCH[0]}"
00000000957481f9-08d035805a5c94bf
答案 4 :(得分:1)
这可以在awk中轻松完成:
string="//ABC/REC/TLC/SC-prod/1f9/20/00000000957481f9-08d035805a5c94bf"
echo "${string}" | awk -v FS="/" '{ print $NF }'
使用“/”作为字段分隔符并打印最后一个字段。
答案 5 :(得分:0)
你可以试试这个......
echo //ABC/REC/TLC/SC-prod/1f9/20/00000000957481f9-08d035805a5c94bf |awk -F "/" '{print $NF}'
答案 6 :(得分:0)
如果您想要的不仅仅是路径的最后一部分, 你可以这样做:
echo $PWD | rev | cut -d'/' -f1-2 | rev