shell脚本中有一种简便的字串提取方式,能够从类似test.doc中提取字符的文件名或者扩展名。
代码如下(选自linux shell脚本攻略)
```
$a=hack.func.book.txt
#提取文件名一
$echo ${a%.*}
hack.func.book
#提取文件名二
$echo ${a%%.*}
hack
#提取扩展名一
$echo ${a#(*.)}
func.book.txt
#提取扩展名二
$echo ${a##*.}
txt
```
说明
```
<pre name="code" class="python">$a=hack.func.book.txt #我们要提取的字符串是这个
#提取文件名一
$echo ${a%(.*)} # 首先%确定我从右向左匹配,匹配满足.*的字串,就是左边一点右边随便是什么都行。于是
hack.func.book # 我从右往左找啊找,找到了第一个是.txt, 第二个是 .book.txt 第三个符合的字串是
# .func.book.txt 那么我匹配那一个呢?这时需要注意,我的%是不贪心的,匹配到第一个
# 时候我就高高兴兴收工了,好,我匹配到.txt了,然后我采取了减法思想,把他去掉,
# 就是hack.func.book了
#提取文件名二
$echo ${a%%(.*)} # %%要匹配的字符串和之前是一样的,也是.*,他从右往左匹配的方法和前者是一样的,也是
# 第一个.txt 第二个.book.txt 第三个.func.book.txt。 但是这货比较贪心,它要一直匹配
# 匹配到最后一个才收工,于是它匹配到了满足条件的最长的字串.func.book.txt,
# 好,下一步做掉它吧。于是就剩下 hack自己了。
#提取扩展名一
$echo ${a#(*.)} # #和%正好是相反的,#从左往右匹配,它要匹配像 *.这样的字符,也就是左边随便是什么
func.book.txt # 最后有个.点号的字串。于是它开始从左匹配了,先后匹配到hack.然后是hack.fun.然后
# 还有hack.func.book. 它也是不贪心的non-freedy,所以收工拿到的是hack.这个东西,最
# 后我们同样要将匹配到的删除,最后就剩下func.book.txt了
提取扩展名二
$echo ${a##(*.)} # ##则是从左向右很猛的进行匹配,匹配到hack.func.book. 因此删除他们的话,
txt # 就得到txt咯。
```
- 图片处理
- 调整图片像素大小
- Python控制摄像头拍照
- 文件操作
- 提取文件名,扩展名
- 查找文件
- ls列出目录,文件
- shell解析json串
- 读取文件第n行内容
- 将变量写入文件和从文件读取变量的一中方法
- shell操作二进制文件
- 命令行将ppt转换为pdf
- python读取串口数据
- 查最近修改的文件
- awk的一些操作
- 输入输出
- 判断输入是否为数字
- 获取脚本输入的第 i 个参数
- column实现输出列表对齐
- 串口调试脚本
- 按键实时检测
- 网络脚本
- 基于Python的TCP客户端
- bash将字符转换为urlencode
- 挂载远程文件夹到本地
- 其他功能
- shell随机产生某一个范围内的整数
- 删除、替换字符串中指定的字符
- 获取时间日期并打印
- 字符串反转
- 实用功能
- 自定义函数模板
- shell中包含另一个脚本文件实现include的方法
- Bash下实现自定义指令的几种方法
- 根据文件类型自动执行脚本
- 命令行运行matlab
- 项目引导main.sh脚本
- 新建文件模板脚本
- bash实现读取和改写ini文件
- 添加当前路径到fish shell环境变量
- 查询进程并杀死进程
- 带界面的身份验证
- 常用软件
- 基本软件
- 我喜欢的软件
- 自用带有界面的系统修复工具-repair
- 解析xml文件