Chinaunix首页 | 论坛 | 博客
  • 博客访问: 286955
  • 博文数量: 70
  • 博客积分: 485
  • 博客等级: 下士
  • 技术积分: 632
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-25 08:55
文章分类

全部博文(70)

文章存档

2014年(47)

2013年(1)

2012年(22)

我的朋友

分类: LINUX

2014-04-15 15:01:51


转载:

有些脚本要根据文件名进行各种处理,有时候需要保留文件名抛弃文件后缀,也有时候需要文件后缀不要文件名,这类提取文件部分的操作使用的内建功能就能实现。需要用到的几个操作符有:%%%###

从右向左匹配 :% 和 %% 操作符的示例

#!/bin/bash
#提取文件名,删除后缀。 file_name="text.gif"
name=${file_name%.*}
echo file name is: $name

输出结果:
file name is: test

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

file_name="text.gif.bak.2012"
name=${file_name%.*}
name2=${file_name%%.*}
echo file name is: $name
echo file name is: $name2

输出结果:
file name is: test.gif.bak //使用 % file name is: test //使用 %% 操作符 %% 使用 .* 从右向左贪婪匹配到 .gif.bak.2012

从左向右匹配:# 和 ## 操作符示例

#!/bin/bash
#提取后缀,删除文件名。 file_name="text.gif"
suffix=${file_name#*.}
echo suffix is: $suffix

输出结果:
suffix is: gif

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

file_name="text.gif.bak.2012.txt"
suffix=${file_name#*.}
suffix2=${file_name##*.}
echo suffix is: $suffix
echo suffix is: $suffix2

输出结果:
suffix is: text.gif.bak.2012 //使用 # suffix2 is: txt //使用 ## 操作符 ## 使用 *. 从左向右贪婪匹配到 text.gif.bak.2012

示例2,定义变量 url=""

echo ${url%.*} #移除 .* 所匹配的最右边的内容。 
echo ${url%%.*} #将从右边开始一直匹配到最左边的 *. 移除,贪婪操作符。 www
echo ${url#*.} #移除 *. 所有匹配的最左边的内容。 1987.name
echo ${url##*.} #将从左边开始一直匹配到最右边的 *. 移除,贪婪操作符。 name
阅读(964) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~