假设我有字符串1:2:3:4:5,我想要得到它的最后一个字段(在本例中是5)。我如何使用Bash做到这一点?我试过cut,但我不知道如何用-f指定最后一个字段。
当前回答
对不起,我不能评论,但在这里; 来自@mateusz-piotrowski @user3133260的答案,
回声“e b: c: d::::::“| tr ':' ' ' | xargs | tr ' ' ' \ n ' |尾1
首先,tr ':' ' ' ->将':'替换为空格
然后,用xargs修整
之后,tr ' ' '\n' ->将保留的空格替换为换行符
最后,tail -1 ->得到最后一个字符串
其他回答
for x in `echo $str | tr ";" "\n"`; do echo $x; done
对于那些熟悉Python的人来说,https://github.com/Russell91/pythonpy是解决这个问题的一个不错的选择。
$ echo "a:b:c:d:e" | py -x 'x.split(":")[-1]'
将stdin的每一行都视为x。
使用该工具,可以很容易地编写应用于输入的python代码。
编辑(2020年12月): Pythonpy不再在线。 这里有一个替代方案:
$ echo "a:b:c:d:e" | python -c 'import sys; sys.stdout.write(sys.stdin.read().split(":")[-1])'
它包含更多的样板代码(即sys.stdout.read/write),但只需要来自python的STD库。
sed中的正则表达式匹配是贪婪的(总是到最后一个出现),你可以在这里使用它:
$ foo=1:2:3:4:5
$ echo ${foo} | sed "s/.*://"
5
假设使用相当简单(例如,没有转义分隔符),您可以使用grep:
$ echo "1:2:3:4:5" | grep -oE "[^:]+$"
5
分解-找到行($)末尾的所有字符,而不是分隔符([^:])。-o只打印匹配的部分。
$ echo "a b c d e" | tr ' ' '\n' | tail -1
e
只需将分隔符转换为换行符,并选择尾为-1的最后一个条目。
推荐文章
- 检查bash变量是否等于0
- 如何分割逗号分隔的字符串?
- 只使用md5sum获取哈希值(没有文件名)
- 如何生成一个核心转储在Linux上的分段错误?
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 拆分字符串,在一行中转换为ist<int>()
- 如何删除超过X小时的文件
- 如何创建Bash别名?
- 将所有变量从一个shell脚本传递到另一个?
- 我能把已经分裂的大块头和少不要脸的人分开吗?
- 如何删除shell脚本中文件名的扩展名?
- 使用xargs调用shell函数
- 如何限制从grep返回的结果的数量?
- 'find -exec'是Linux中的shell函数
- 将值从管道读入shell变量