假设我有字符串1:2:3:4:5,我想要得到它的最后一个字段(在本例中是5)。我如何使用Bash做到这一点?我试过cut,但我不知道如何用-f指定最后一个字段。
当前回答
如果你的最后一个字段是一个字符,你可以这样做:
a="1:2:3:4:5"
echo ${a: -1}
echo ${a:(-1)}
检查bash中的字符串操作。
其他回答
for x in `echo $str | tr ";" "\n"`; do echo $x; done
对不起,我不能评论,但在这里; 来自@mateusz-piotrowski @user3133260的答案,
回声“e b: c: d::::::“| tr ':' ' ' | xargs | tr ' ' ' \ n ' |尾1
首先,tr ':' ' ' ->将':'替换为空格
然后,用xargs修整
之后,tr ' ' '\n' ->将保留的空格替换为换行符
最后,tail -1 ->得到最后一个字符串
这里有很多很好的答案,但我仍然想用basename来分享这个:
basename $(echo "a:b:c:d:e" | tr ':' '/')
然而,如果字符串中已经有一些'/',它将失败。 如果斜杠/是你的分隔符,那么你就必须(也应该)使用basename。
这不是最好的答案,但它只是展示了如何创造性地使用bash命令。
sed中的正则表达式匹配是贪婪的(总是到最后一个出现),你可以在这里使用它:
$ foo=1:2:3:4:5
$ echo ${foo} | sed "s/.*://"
5
使用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变量是否等于0
- 如何分割逗号分隔的字符串?
- 只使用md5sum获取哈希值(没有文件名)
- 如何生成一个核心转储在Linux上的分段错误?
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 拆分字符串,在一行中转换为ist<int>()
- 如何删除超过X小时的文件
- 如何创建Bash别名?
- 将所有变量从一个shell脚本传递到另一个?
- 我能把已经分裂的大块头和少不要脸的人分开吗?
- 如何删除shell脚本中文件名的扩展名?
- 使用xargs调用shell函数
- 如何限制从grep返回的结果的数量?
- 'find -exec'是Linux中的shell函数
- 将值从管道读入shell变量