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


当前回答

如果你想使用cut,你可以尝试这样做:

echo "1:2:3:4:5" | cut -d ":" -f5

你也可以像这样使用grep try:

echo " 1:2:3:4:5" | grep -o '[^:]*$'

其他回答

echo "a:b:c:d:e"|xargs -d : -n1|tail -1

首先使用xargs使用“:”分割它,-n1意味着每一行只有一个部分。然后,弹簧最后一部分。

你可以使用字符串操作符:

$ foo=1:2:3:4:5
$ echo ${foo##*:}
5

这将从前面到':'贪婪地修剪所有内容。

${foo  <-- from variable foo
  ##   <-- greedy front trim
  *    <-- matches anything
  :    <-- until the last ':'
 }

如果你的最后一个字段是一个字符,你可以这样做:

a="1:2:3:4:5"

echo ${a: -1}
echo ${a:(-1)}

检查bash中的字符串操作。

使用sed:

$ echo '1:2:3:4:5' | sed 's/.*://' # => 5

$ echo '' | sed 's/.*://' # => (empty)

$ echo ':' | sed 's/.*://' # => (empty)
$ echo ':b' | sed 's/.*://' # => b
$ echo '::c' | sed 's/.*://' # => c

$ echo 'a' | sed 's/.*://' # => a
$ echo 'a:' | sed 's/.*://' # => (empty)
$ echo 'a:b' | sed 's/.*://' # => b
$ echo 'a::c' | sed 's/.*://' # => c

使用Bash。

$ var1="1:2:3:4:0"
$ IFS=":"
$ set -- $var1
$ eval echo  \$${#}
0