首页 > 代码库 > shell编程--切分文件名
shell编程--切分文件名
引:有时候我们会碰到这这样的需求,需要从文件名xxx.yyy中切分出名称xxx和扩展名yyy。这些可以利用“%” “%%” “#” “##”操作符来完成。
一. “%” 操作符:
1. 例子:
例1
例2
2.解释:
例1:file变量的值为“sample.jpg”。 file%.* 意思是从file变量(例子中是sample.jpg)的右边开始匹配,直到遇到第一个匹配 .* 的字符串(例子中是.jpg),然后将其删掉 。所以变量name的值就是sample了。
例2:如果file变量的值为"sample.jpg.txt",那么file%.* 只会删除 .txt ,name会是sample.jpg。也即%操作符是非贪婪的。遇到第一个匹配后就会停止。
3. 注意:
- % 后面的并不是正则表达式,* 匹配任意长的字符,? 匹配一个字符。如1?2 可以匹配132和1a2;a* 可以匹配任意以a开头的字符串。
- 匹配是从最后一个字符,从右向左匹配的。file%.*m (变量file值为sample.jpg)不会删掉任何字符。因为变量的最后一个字符是 g,永远也不会有匹配 .*m 的字符串。
二. "%%" 操作符:
1. 例子:
2. 解释:
“%%” 与 “%” 的区别就是‘%%‘是贪婪的,意味着它会匹配符合条件的最长字符串。所以在例子中,file%%.* 会从右边开始匹配,最长的匹配是.jpg.txt,然后将其删除。所以变量name的值为sample。
三. "#"操作符
1. 例子:
例1
例2
2. 解释:
例1:file#*. 是从右向左执行非贪婪匹配。找到第一个匹配 *. 的字符串(例子中是"sample."),然后将其删除。于是变量ext就是 “jpg” 了。
例2:说明了#的匹配是非贪婪的,找到第一个匹配了就会停止。
四. "##"操作符
1. 例子:
2. 解释:
与"%%" 类似,“##” 是 “#” 的贪婪模式,也即会从右向左匹配符合条件的最长字符串。所以例子中将会删除“sample.jpg.txt"中的”sample.jgp.“。
shell编程--切分文件名