写脚本遇到获取变量或字符长度问题,如字符串长度、截取指定长度等。
获取字符操作常用两种${}和awk
${}:字节的起始位是0
awk:字节的起始位是1
如:获取字符串长度
AAA=ffing.cn
###使用${}
[root@ffing ~]# echo ${#AAA}
8
###使用awk需配合length
[root@ffing ~]# echo $AAA|awk '{print length}'
8
如:截取字符
AAA=ffing.cn
###使用${}
#截取前2个字节:0代表起始位置:2代表两个字节
[root@ffing ~]# echo ${AAA:0:2}
ff
#截取第后2个字节,需要先获取总字节长度,$(())支持语法及运算
[root@ffing ~]# NUM=$((${#AAA}-2)) &&echo $NUM
6
#起始位是0,因此6其实是第7位字节!
[root@ffing ~]# echo ${AAA:NUM:2}
cn
###awk需配合substr
#截取前2个字节,1代表起始位置,2代表2个字节
[root@ffing ~]# echo $AAA|awk '{print substr($1,1,2)}'
ff
#截取最后2个字节,需利用length获取字符长度,为什么减1?因为awk起始位置是1
#即:substr内为($1,8-1,2),从第7为取2个字节!
[root@ffing ~]# echo $AAA|awk '{print substr($1, length($1)-1 ,2)}'
cn
场景应用1:获取时间戳
#时间戳获取:时分秒
DATETIME='**** 15/Mar/2022_15:13:09AM'
#awk获取时间戳,以冒号分割
#小时是倒数第三个字段$(NF-2),取最后2个字节:substr($(NF-2),length($(NF-2))-1,2)
#分钟是倒数第二个字段$(NF-1)
#秒就是最后一个字段$NF,取前2个字节了:substr( $NF,1,2 )
echo $DATETIME|awk -F":" '{print substr($(NF-2),length($(NF-2))-1,2) ":" $(NF-1) ":" substr( $NF,1,2 )}'
#注:获取小时,需要先获取$(NF-2)的长度,因此length( $(NF-2) )
场景应用2:获取文件名
#不推荐$0,因为$0其实是你执行脚本的路径
#推荐readlink -f 《文件名》
#
发表评论