常州网管员

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1417|回复: 1

切分文件名提取文件扩展名或提取文件名

[复制链接]
发表于 2017-11-21 12:54:18 | 显示全部楼层 |阅读模式
有些脚本要根据文件名进行各种处理,有时候需要保留文件名抛弃文件后缀,也有时候需要文件后缀不要文件名,这类提取文件部分的操作使用shell的内建功能就能实现。需要用到的几个操作符有:%%%###
从右向左匹配 :%%% 操作符的示例

  1. #!/bin/bash
  2. #提取文件名,删除后缀。

  3. file_name="text.gif"
  4. name=${file_name%.*}
  5. echo file name is: $name

  6. 输出结果:
  7. file name is: test

  8. # ${VAR%.* }含义:从$VAR中删除位于 % 右侧的通配符左右匹配的字符串,通配符从右向左进行匹配。现在给变量 name 赋值,name=text.gif,那么通配符从右向左就会匹配到 .gif,所有从 $VAR 中删除匹配结果。
  9. # % 属于非贪婪操作符,他是从左右向左匹配最短结果;%% 属于贪婪操作符,会从右向左匹配符合条件的最长字符串。

  10. file_name="text.gif.bak.2012"
  11. name=${file_name%.*}
  12. name2=${file_name%%.*}
  13. echo file name is: $name
  14. echo file name is: $name2

  15. 输出结果:
  16. file name is: test.gif.bak    //使用 %
  17. file name is: test            //使用 %%

  18. 操作符 %% 使用 .* 从右向左贪婪匹配到 .gif.bak.2012
复制代码
从左向右匹配:### 操作符示例

  1. #!/bin/bash
  2. #提取后缀,删除文件名。

  3. file_name="text.gif"
  4. suffix=${file_name#*.}
  5. echo suffix is: $suffix

  6. 输出结果:
  7. suffix is: gif

  8. # ${VAR#*.} 含义:从 $VAR 中删除位于 # 右侧的通配符所匹配的字符串,通配符是左向右进行匹配。
  9. # 跟 % 一样,# 也有贪婪操作符 ## 。

  10. file_name="text.gif.bak.2012.txt"
  11. suffix=${file_name#*.}
  12. suffix2=${file_name##*.}
  13. echo suffix is: $suffix
  14. echo suffix is: $suffix2

  15. 输出结果:
  16. suffix is: text.gif.bak.2012     //使用 #
  17. suffix2 is: txt                  //使用 ##

  18. 操作符 ## 使用 *. 从左向右贪婪匹配到 text.gif.bak.2012
复制代码
示例2,定义变量 url="www.1987.name"

  1. echo ${url%.*}      #移除 .* 所匹配的最右边的内容。
  2. www.1987
复制代码
  1. echo ${url%%.*}     #将从右边开始一直匹配到最左边的 *. 移除,贪婪操作符。
  2. www
复制代码
  1. echo ${url#*.}      #移除 *. 所有匹配的最左边的内容。
  2. 1987.name
复制代码
  1. echo ${url##*.}     #将从左边开始一直匹配到最右边的 *. 移除,贪婪操作符。
  2. name
复制代码

真心的发现WIN8很不好用,到不是说没有开始菜单就不习惯了,关键是很多专业软件都不能再它上面运行,而且自带IE10,基本没几个网站兼容。
 楼主| 发表于 2017-11-21 12:59:27 | 显示全部楼层
真心的发现WIN8很不好用,到不是说没有开始菜单就不习惯了,关键是很多专业软件都不能再它上面运行,而且自带IE10,基本没几个网站兼容。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|常州网管员 ( 苏ICP备09009643号 )

GMT+8, 2019-11-23 02:21 , Processed in 0.015011 second(s), 8 queries , MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表