假设我有字符串1:2:3:4:5,我想要得到它的最后一个字段(在本例中是5)。我如何使用Bash做到这一点?我试过cut,但我不知道如何用-f指定最后一个字段。
当前回答
$ echo "a b c d e" | tr ' ' '\n' | tail -1
e
只需将分隔符转换为换行符,并选择尾为-1的最后一个条目。
其他回答
for x in `echo $str | tr ";" "\n"`; do echo $x; done
另一种方法是将前后剪反:
$ echo ab:cd:ef | rev | cut -d: -f1 | rev
ef
这使得获取倒数第二个字段或从末尾开始编号的任何字段范围非常容易。
一个方法:
var1="1:2:3:4:5"
var2=${var1##*:}
另一个,使用数组:
var1="1:2:3:4:5"
saveIFS=$IFS
IFS=":"
var2=($var1)
IFS=$saveIFS
var2=${var2[@]: -1}
还有一个数组:
var1="1:2:3:4:5"
saveIFS=$IFS
IFS=":"
var2=($var1)
IFS=$saveIFS
count=${#var2[@]}
var2=${var2[$count-1]}
使用Bash(版本>= 3.2)正则表达式:
var1="1:2:3:4:5"
[[ $var1 =~ :([^:]*)$ ]]
var2=${BASH_REMATCH[1]}
如果你想使用cut,你可以尝试这样做:
echo "1:2:3:4:5" | cut -d ":" -f5
你也可以像这样使用grep try:
echo " 1:2:3:4:5" | grep -o '[^:]*$'
如果你的最后一个字段是一个字符,你可以这样做:
a="1:2:3:4:5"
echo ${a: -1}
echo ${a:(-1)}
检查bash中的字符串操作。
推荐文章
- 在Bash中将输出赋给变量
- 如何在Mac OS X 10.6中使硬件发出哔哔声
- 从Docker容器获取环境变量
- Java中的split()方法对点(.)不起作用。
- 如何重定向标准derr和标准输出到不同的文件在同一行脚本?
- 如何循环通过一个目录递归删除具有某些扩展名的文件
- 在Bash中获取日期(比当前时间早一天)
- Linux: kill后台任务
- 在OSX中永久设置PATH环境变量
- 删除Bash脚本中的重复条目
- 如何将Bash命令的输出分配给变量?
- 在bash中传递数组作为参数
- 如何在shell中为for循环添加前导零?
- Bash中单方括号和双方括号的区别
- 我如何找到传递给Bash脚本的参数的数量?