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.“。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。