shell脚本之切分文件名与扩展名 |
您所在的位置:网站首页 › shell脚本文件后缀 › shell脚本之切分文件名与扩展名 |
注:区分好通配符和正则表达式的符号含义 通配符:一般只用于文件名匹配 1、*表示匹配任意长度的任意字符 2、? 表示匹配一个任意字符 3、[] 表示匹配括号中列出的字符中的任意一个 4、[a-d]表示aAbBcCd shell脚本都涉及修改文件名的操作。我们可能需要在保留扩展名的同时修改文件名、转换文件格式(保留文件名的同时修改扩展名)或提取部分文件名。 实战演练(提取文件名): [root@Script-test ~]# var="index.html" [root@Script-test ~]# name=${var%.*} %操作符 [root@Script-test ~]# echo $name index原理: 从 $VAR中删除位于%右侧的通配符(在上例中是.*)所匹配的字符串。通配符从右向左进行匹配。给VAR赋值,即VAR=index.html。通配符从右向左匹配到的内容是.html,因此从$VAR中 删除匹配结果,得到输出index。%属于非贪婪(non-greedy)操作。它从右向左找出匹配通配符的最短结果。还有另一个操作符%%,它与%相似,但行为模式却是贪婪的,这意味着它会匹配符合通配符的最长结果。例如, [root@Script-test ~]# VAR=hack.fun.book.txt 非贪婪模式(%) [root@Script-test ~]# echo ${VAR%.*} hack.fun.book [root@Script-test ~]# VAR=hack.fun.book.txt 贪婪模式(%%) [root@Script-test ~]# echo ${VAR%%.*} hack实战演练(提取扩展名): 原理:#操作符可以从文件名中提取扩展名。这个操作符与%类似,不过求值方向是从左向右。 [root@Script-test ~]# var=test.jpg [root@Script-test ~]# echo ${var#*.} #操作符 jpg [root@Script-test ~]# var="www.baidu.com" [root@Script-test ~]# echo ${var##*.} 贪婪模式(##) com [root@Script-test ~]# echo ${var#*.} 非贪婪模式(#) baidu.com技巧:切割扩展名的时候贪婪模式(##)更适用,文件名可能会包含多个.字符;譬如var=hack.fun.book.txt,用贪婪模式(##)则可切割出txt 总结: 获取文件名使用% (从右向左匹配)获取扩展名使用# (从左向右匹配) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |