切分文件名提取文件扩展名或提取文件名,提取文件名和目录名的一些方法总结

多多时候在采取Linux的shell时,大家都亟待对文本名或目录名实行拍卖,平时的操作是由路径中领到出文件名,从路线中领抽出目录名,提取文件后缀名等等。比方,从路线/dir1/dir2/file.txt中提取也文件名file.txt,提抽出目录/dir1/dir2,提抽取文件后缀txt等。

 

切分文件名提取文件扩展名或提取文件名,提取文件名和目录名的一些方法总结。需求选用的多少个操作符:%、%%、#、##

Linux中推行shell脚本的4种形式总计,即在Linux中运作shell脚本的4种方法:

上面介绍三种常用的不二等秘书籍来打开有关的操作。

重重时候在使用Linux的shell时,大家都供给对文本名或目录名展开管理,日常的操作是由路线中领到出文件名,从路径中领抽取目录名,提取文件后缀名等等。比方,从路线/dir1/dir2/file.txt中提取也文件名file.txt,提收取目录/dir1/dir2,提抽取文件后缀txt等。

1.从右向左匹配:%和%%

艺术一:切换成shell脚本所在的目录(此时,称为职业目录)实行shell脚本:

一、使用${}

上边介绍三种常用的措施来张开相关的操作。


复制代码 代码如下:

1、${var##*/}
该命令的意义是去掉变量var从右侧算起的终极一个’/’字符及其左侧的剧情,再次来到从左侧算起的末段叁个’/’(不含该字符)的左侧的内容。使用例子及结果如下:

一、使用${}

#!/bin/bash

cd /data/shell

图片 1

1、${var##*/}
该命令的职能是去掉变量var从左边算起的最后三个’/’字符及其右侧的内容,再次回到从右边算起的末段八个’/’(不含该字符)的右边的情节。使用例子及结果如下:
图片 2

file_name=”text.gif”

./hello.sh

从运维结果能够观望,使用该命令,可以领收取大家必要的文书名file.txt。

从运营结果可以看来,使用该命令,能够领到出大家须要的文书名file.txt。

name=${file_name%.*}

./的意味是说在现阶段的干活目录下施行hello.sh。假若不加上./,bash只怕会响应找到不到hello.sh的错误音讯。因为日前的做事目录
(/data/shell)恐怕不在推行顺序暗中认可的检索路线之列,也便是说,不在情况变量PASH的内容之中。查看PATH的内容可用
echo $PASH
命令。以后的/data/shell就不在情状变量PASH中的,所以必须加上./才可实施。

若采取时在shell程序文件中,能够利用变量来保存这几个结果,再加以运用,如file=${var##*/}

若使用时在shell程序文件中,能够选用变量来保存那些结果,再加以利用,如file=${var##*/}

echo file name is $name

 

2、${var##*.}

2、${var##*.}
该命令的效益是去掉变量var从右边算起的最终二个’.’字符及其左侧的内容,再次回到从右边算起的终极三个’.’(不含该字符)的左边的从头到尾的经过。使用例子及结果如下:
图片 3


主意二:以相对路线的方法去施行bash shell脚本:

该命令的功能是去掉变量var从左边算起的末段二个’.’字符及其左侧的源委,再次来到从左侧算起的末尾三个’.’(不含该字符)的左边手的内容。使用例子及结果如下:

从运转结果能够观察,使用该命令,能够领到出大家必要的文本后缀。

输出的结果为:file name is text.

复制代码 代码如下:

图片 4

若果文件的后缀不止有四个,例如,file.tar.gz,命令${var##*.}仅能领取最终一个后缀,而自己想提取tar.gz时该如何做?那么快要用上边所说的${var#*.}命令了。

${VAR%.*}含义:从$VA中华V中删除位于%入手的通配符左右一双两好的字符串,通配符从右向左进行相称。现在给变量name举行赋值,name=text.gif,那么通配符从右向左就能够协作到.gif.所以从$VA奥德赛后除去匹配结果。

/data/shell/hello.sh

从运营结果能够看到,使用该命令,能够领到出我们须要的公文后缀。

3、${var#*.}
该命令的功效是去掉变量var从左边算起的率先个’.’字符及其左侧的源委,再次回到从左边算起率先个’.’(不含该字符)的左臂部分的内容。使用例子及结果如下:
图片 5
从运转结果能够见到,使用该命令,能够领到出文件的三个后缀。

#属于非贪婪操作符,他是从右向左匹配最短结果;

 

只要文件的后缀不仅仅有一个,举个例子,file.tar.gz,命令${var##*.}仅能领到最终贰个后缀,而自身想提取tar.gz时该怎么做?那么将在用上面所说的${var#*.}命令了。

4、${var%/*}
该命令的应用是去掉变量var从右边算起的首先个’/’字符及其右侧的内容,再次来到从左边算起的率先个’/’(不含该字符)的左边手的原委。使用例子及结果如下:
图片 6
从运维的结果能够看到,使用该命令,能够领抽取大家须要的文书所在的目录

##属于贪婪操作符,会从右向左相称符合条件的最长字符串;

方法三:直接利用bash 或sh 来实施bash shell脚本:

3、${var#*.}

${var%%.*}
该命令的采纳是去掉变量var从左侧算起的最终一个’.’字符及其左边的剧情,重回从右边算起的最终一个’.’(不含该字符)的左边的原委。使用例子及结果如下:
图片 7
当大家必要创设一个与公事名一样名字(未有后缀)的目录与相应的文书相呼应时,就能够动用该命令来拓展操作。举例,解压文件的境况就与此类似,大家压缩文件file.zip时,会在与file.zip同级目录下制造一个名称叫file的目录。


复制代码 代码如下:

该命令的功力是去掉变量var从左侧算起的第叁个’.’字符及其左侧的内容,再次回到从左边算起第贰个’.’(不含该字符)的入手部分的剧情。使用例子及结果如下:

事实上${}并不是特别为领取文件名或目录名的,它的应用是变量的领到和替换等等操作,它能够领取相当多的内容,并不一定是地方七个例证中的’/’或’.’。也正是说,上边的施用方式只是它应用的三个特例。

file_name=”text.gif.bak.2012″

cd /data/shell

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图