第十四章 切分文件名提取文件扩展名或提取文件名:%%%和###

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十四章 切分文件名提取文件扩展名或提取文件名:%%%和###相关的知识,希望对你有一定的参考价值。

第十四章 切分文件名提取文件扩展名或提取文件名:%、%%和#、

作用

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

实例

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

[[email protected] jinghao]# cat t.txt 
#!/bin/bash
file_name=‘test.text‘
name=${file_name%.*}
echo file name is: $name

[[email protected] jinghao]# /bin/sh t.txt 
file name is: test

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

[[email protected] jinghao]# cat t2.txt     
#!/bin/bash

file_name=‘test.text.bak.old.123‘
name=${file_name%%.*}
echo file name is: $name
[[email protected] jinghao]# /bin/sh t2.txt  #当使用%% 结果
file name is: test

[[email protected] jinghao]# /bin/sh t2.txt  #当使用% 结果
file name is: test.text.bak.old

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

#从左向右 最短匹配
[[email protected] jinghao]# cat a.txt     
#!/bin/bash
file_name=‘test.text.bak.old.123‘
name=${file_name#*.}
echo file name is: $name

[[email protected] jinghao]# /bin/sh a.txt  #从左向右 最短匹配
file name is: text.bak.old.123

#从左向右 最长匹配
[[email protected] jinghao]# cat a.txt     
#!/bin/bash
file_name=‘test.text.bak.old.123‘
name=${file_name##*.}
echo file name is: $name

[[email protected] jinghao]# /bin/sh a.txt  #从左向右 最长匹配
file name is: 123

示例2:定义变量 url="man.linuxde.net"

[[email protected] jinghao]# url="man.linuxde.net" #定义变量
[[email protected] jinghao]# echo ${url%.*}    #从右向左 最短匹配
man.linuxde
[[email protected] jinghao]# echo ${url%%.*}   #从右向左 最长匹配
man
[[email protected] jinghao]# echo ${url#*.}    #从左向右 最短匹配
linuxde.net
[[email protected] jinghao]# echo ${url##*.}   #从左向右 最长匹配
net

以上是关于第十四章 切分文件名提取文件扩展名或提取文件名:%%%和###的主要内容,如果未能解决你的问题,请参考以下文章

《C与指针》第十四章练习

第十四章-MySQL

流畅的python第十四章可迭代的对象,迭代器和生成器学习记录

C语言第十四章:C语言补充

第十四章Linux 账号管理与 ACL 权限配置

Java(第十四章)