在Unix Shell脚本中拆分字符串

时间:2014-02-24 21:32:00

标签: shell unix

我有一个像这样的字符串

//ABC/REC/TLC/SC-prod/1f9/20/00000000957481f9-08d035805a5c94bf 

并希望获得

的最后一部分
00000000957481f9-08d035805a5c94bf

7 个答案:

答案 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