第十四章 切分文件名提取文件扩展名或提取文件名:%%%和###
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十四章 切分文件名提取文件扩展名或提取文件名:%%%和###相关的知识,希望对你有一定的参考价值。
第十四章 切分文件名提取文件扩展名或提取文件名:%、%%和#、作用
有些脚本要根据文件名进行各种处理,有时候需要保留文件名抛弃文件后缀,也有时候需要文件后缀不要文件名,这类提取文件部分的操作使用shell的内建功能就能实现。需要用到的几个操作符有:%、%%、#、##
实例
从右向左匹配:%和%%操作符的示例
[[email protected] jinghao]# cat t.txt
#!/bin/bash
file_name=‘test.text‘
name=${file_name%.*}
echo file name is: $name
[[email protected] jinghao]# /bin/sh t.txt
file name is: test
# ${var%.*} 含义:从$var中删除位于%右侧的通配符字符串,通配符从右向左进行匹配。
#现在给name赋值,name=test.text,name通配符从右向左就会匹配到.text,所以从$var中删除匹配到的结果。
# % 属于非贪婪操作符,它是从右向左匹配最短结果;%%属于贪婪匹配,会从右向左匹配符合条件的最长字符串。
[[email protected] jinghao]# cat t2.txt
#!/bin/bash
file_name=‘test.text.bak.old.123‘
name=${file_name%%.*}
echo file name is: $name
[[email protected] jinghao]# /bin/sh t2.txt #当使用%% 结果
file name is: test
[[email protected] jinghao]# /bin/sh t2.txt #当使用% 结果
file name is: test.text.bak.old
从左向右匹配:#和##操作符示例
#从左向右 最短匹配
[[email protected] jinghao]# cat a.txt
#!/bin/bash
file_name=‘test.text.bak.old.123‘
name=${file_name#*.}
echo file name is: $name
[[email protected] jinghao]# /bin/sh a.txt #从左向右 最短匹配
file name is: text.bak.old.123
#从左向右 最长匹配
[[email protected] jinghao]# cat a.txt
#!/bin/bash
file_name=‘test.text.bak.old.123‘
name=${file_name##*.}
echo file name is: $name
[[email protected] jinghao]# /bin/sh a.txt #从左向右 最长匹配
file name is: 123
示例2:定义变量 url="man.linuxde.net"
[[email protected] jinghao]# url="man.linuxde.net" #定义变量
[[email protected] jinghao]# echo ${url%.*} #从右向左 最短匹配
man.linuxde
[[email protected] jinghao]# echo ${url%%.*} #从右向左 最长匹配
man
[[email protected] jinghao]# echo ${url#*.} #从左向右 最短匹配
linuxde.net
[[email protected] jinghao]# echo ${url##*.} #从左向右 最长匹配
net
以上是关于第十四章 切分文件名提取文件扩展名或提取文件名:%%%和###的主要内容,如果未能解决你的问题,请参考以下文章