shell脚本中字符串截取问题
#和%在shell中的应用
【#和$匹配规则】
【原文参考】https://blog.csdn.net/hongchangfirst/article/details/28436947?utm_source=blogxgwz4
https://www.cnblogs.com/kevingrace/p/8868262.html
【规则】
(1)${string#*/} # 在字符串string中从左往右匹配到第一个“/”时,打印这个斜杠后面的内容;
(2)${string%/*} # 在字符串string中从右往左匹配到第一个“/”时,打印这个斜杠前面的内容;
【实例1】#和%使用演示
#! /bin/bash
files=`find -name 2020092715_vpn_client.config`
for i in $files
do
echo "{i#*/}:" ${i#*/}
echo "{i%/*}:" ${i%/*}
done
运行结果:
{i#*/}: Downloads/vpnclient/backup.vpn_client.config/2020092715_vpn_client.config
{i%/*}: ./Downloads/vpnclient/backup.vpn_client.config
i字符串:
./Downloads/vpnclient/backup.vpn_client.config/2020092715_vpn_client.config
【实例2】批量删除文件最后一个字符串
#! /bin/bash
for i in $(cat path1.txt)
do
echo ${i%/*} >> path2.txt # 注意{}里面调用变量i的时候没有加$
done
【拓展】
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string} 从左向右截取第一个string后的字符串
${varible%%string*} 从右向左截取最后一个string后的字符串
${varible%string*} 从右向左截取第一个string后的字符串
【实例3】echo命令实现字符串切片
【原文参考】https://www.cnblogs.com/cangqinglang/p/11952838.html
【备注】echo ${字符串:开始的位置:截取多少个字符}
修改大写为小写
【备注】只是显示变了
【实例4】统计字符串的长度
name=Alex
echo ${#name}