linux shell split 字符串,关于bash:如何在shell中分割字符串并获取最后一个字段

假设我有字符串1:2:3:4:5,我想获取它的最后一个字段(在本例中为5)。 如何使用Bash做到这一点? 我尝试了cut,但是我不知道如何用-f指定最后一个字段。

您可以使用字符串运算符:

$ foo=1:2:3:4:5

$ echo ${foo##*:}

5

贪婪地修剪从前到':'的所有内容。

${foo  

##  

*    

:    

}

尽管这对于给定的问题有效,但如果字符串为1:2:3:4:5:(使用字符串运算符时将产生空结果),下面的William(stackoverflow.com/a/3163857/520162)的答案也会返回5。这在解析可能包含(或不包含)后缀字符的路径时特别方便。

那么您将如何做相反的事情?回声1:2:3:4 :?

以及如何将零件保留在最后一个分隔符之前?显然是使用${foo%:*}。 #-从头开始; %-从头开始。 #,%-最短匹配; ##,%%-最长匹配。

如果我想从路径中获取最后一个元素,应该如何使用? echo ${pwd##*}不起作用。

@Putnik,该命令将pwd视为变量。尝试dir=$(pwd); echo ${dir##*}。为我工作!

@Stephen如何使用点(。)作为定界符?

谢谢,它解决了我的问题。我被困了2天

另一种方法是在cut之前和之后进行反转:

$ echo ab:cd:ef | rev | cut -d: -f1 | rev

ef

这样很容易获得最后一个字段,或者从末尾开始编号的任何范围的字段。

这个答案很好,因为它使用了cut(作者可能已经很熟悉)了。另外,我喜欢这个答案,因为我正在使用cut并有这个确切的问题,因此可以通过搜索找到该线程。

供使用空格作为定界符的人使用的一些剪切粘贴的饲料:echo"1 2 3 4" | rev | cut -d"" -f1 | rev

转速|切-d -f1 |转速是如此高明!谢谢!帮助了我很多(我的用例是rev | -d -f 2- | rev

我总是忘记了rev,这正是我所需要的! cut -b20- | rev | cut -b10- | rev

你可能感兴趣的:(linux,shell,split,字符串)