shell脚本之切分文件名与扩展名

您所在的位置:网站首页 shell脚本文件后缀 shell脚本之切分文件名与扩展名

shell脚本之切分文件名与扩展名

2022-05-23 04:01| 来源: 网络整理| 查看: 265

注:区分好通配符和正则表达式的符号含义

通配符:一般只用于文件名匹配 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