shell 截取字符串

shell 匹配截取字符串

一直在使用php语言,使用substr,perg_match等函数对字符串操作,近期要使用一个shell脚本对特定的文件进行排序,为了截取特定的字符,纠结了一阵,现将一些东西记录备忘

假定变量 file=172.23.xx.xx_1324443111.xml

第一种:#%截取

echo ${file#*_} #删除左边字符,保留右边字符
  #其中file是变量名,#号是运算符,*_表示从左边开始删除{第一个} _号及左边的所有字符
1324443111.xml

echo ${file##*_} # 删除左边字符,保留右边字符
  # ##*_ 表示从左边开始删除{最后(最右边)}一个_号及左边的所有字符
1324443111.xml

echo ${file%/*}  // 删除右边字符,保留左边字符
#  %_* 表示从右边开始,删除{第一个_号}及右边的字符
172.23.xx.xx

echo ${file%%/*}  # 删除右边字符,保留左边字符
# %%/_从右边开始,删除{最后(最左边)}一个_号及右边的字符

172.23.xx.xx

第二种,根据位置截取

echo ${file:0:6} #从左边第几个字符开始,及字符的个数
#其中的0表示左边第一个字符开始,6表示字符的总个数
172.23

echo ${file:6}   #从左边第几个字符开始,一直到结束
# 其中的6表示左边第7个字符开始,一直到结束
.xx.xx_1324443111.xml

## 文件后缀截取从左到右
echo ${file:0-14:10} #从右边第几个字符开始,及字符的个数
# 从右边第5个字符起的10个字符
132444311

echo ${file:0-4} # 从右边第几个字符开始,及字符的个数
# 从右边的第5个字符一直到结束
.xml

相关类似的功能还可以通过expr,比如expr substr实现,还可以使用sed、awk、cut等命令实现,由于本人现在工作还是以php为主,所以就不啰嗦了,相关知识可以查看linux命令大全

你可能感兴趣的:(shell)