Linux_shell中提取文件名和路径
首先假设我的文件全称:/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh.
获取文件名
使用${},${str##*/}
这个命令的作用就是去掉变量str从左边算起的最后一个/字符及其左边的内容,返回的值是从左边算起的最后一个/(不含该字符)的右边的所有内容,例子很简单:
1 | str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh |
使用awk语句
因为在ubuntu下面,路径都是以/为隔开的,那么我们就以/为分隔符,然后把最后部分打印,赋值,例子如下:
1 | str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh |
使用官方函数basename
bash shell本身提供了basename命令,可以直接获取路径名最后的文件名,实现代码如下:
1 | str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh |
后缀和文件名分开
使用${}
在这里分别使用/和.作为分隔符来进行处理,代码如下:
1 | str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh |
用的是Shell的参数扩展(Parameter Extension)功能,解释如下:
${str##*/}
: 从左边开始删除str中最大匹配(longest matching pattern) / 的字符串${str%/*}
:从右边开始删除str中最小匹配(shortest matching pattern) / 的字符串${file##*.}
:从左边开始删除file中最大匹配(longest matching pattern) . 的字符串${file%.*}
:从右边开始删除file中最小匹配(shortest matching pattern) . 的字符串${file%%.*}
:从右边开始删除file中最大匹配(longest matching pattern) .* 的字符串${file#*.}
:从左边开始删除file中小匹配(shortest matching pattern) *. 的字符串#
:表示从左边算起第一个%
:表示从右边算起第一个##
:表示从左边算起最后一个%%
:表示从右边算起最后一个
换句话来说,#
总是表示左边算起,%
总是表示右边算起。
参数扩展有多种形式,在shell编程中可以用作参数的拼接,字符串的替换,参数列表截取,变量初值等操作,这里不再详述,请参考右边的功能列表和官方文档.
参数扩展功能列表
参数形式 扩展后
1 | x{y,z} xy xz |
获取路径名
使用${},${str%/*}
去掉变量var从右边算起的第一个’/’字符及其右边的内容,返回从右边算起的第一个’/’(不含该字符)的左边的内容。使用例子及结果如下:
1 | str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh |
本文标题:Linux_shell中提取文件名和路径
文章作者:王二
发布时间:2023-09-03
最后更新:2024-11-06
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!