Linux shell中提取文件名和路径
本文地址: https://www.cnblogs.com/wanger-sjtu/p/17561896.html
首先假设我的文件全称:/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh.
获取文件名
使用${},${str##*/}
这个命令的作用就是去掉变量str从左边算起的最后一个/字符及其左边的内容,返回的值是从左边算起的最后一个/(不含该字符)的右边的所有内容,例子很简单:
str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh
file=${str##*/}
echo $file
HLAreporter.sh ## 运行结果
使用awk语句
因为在ubuntu下面,路径都是以/为隔开的,那么我们就以/为分隔符,然后把最后部分打印,赋值,例子如下:
str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh
file=`echo $str | awk -F "/" '{print $NF}'`
echo $file
HLAreporter.sh
使用官方函数basename
bash shell本身提供了basename命令,可以直接获取路径名最后的文件名,实现代码如下:
str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh
file=$(basename $str)
echo $file
HLAreporter.sh
后缀和文件名分开
使用${}
在这里分别使用/和.作为分隔符来进行处理,代码如下:
str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh
file=${str##*/}
filename=${file%.*}
suffix=${file##*.}
echo $file, $filename, $suffix
HLAreporter.sh, HLAreporter, sh
str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103.tar.gz
file=${str##*/}
filename=${file%%.*}
suffix=${file#*.}
echo $file, $filename, $suffix
HLAreporter.v103.tar.gz, HLAreporter, v103.tar.gz
用的是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编程中可以用作参数的拼接,字符串的替换,参数列表截取,变量初值等操作,这里不再详述,请参考右边的功能列表和官方文档.
参数扩展功能列表
参数形式 扩展后
x{y,z} xy xz
${x}{y, z} ${x}y ${x}z
${x}{y, $z} ${x}y ${x}${z}
${param#pattern} 从param前面删除pattern的最小匹配
${param##pattern} 从param前面删除pattern的最大匹配
${param%pattern} 从param后面删除pattern的最小匹配
${param%%pattern} 从param后面删除pattern的最大匹配
${param/pattern/string} 从param中用string替换pattern的第一次匹配,string可为空
${param//pattern/string} 从param中用string替换pattern的所有匹配,string可为空
${param:3:2} 截取$param中索引3开始的2个字符
${param:3} 截取$param中索引3至末尾的字符
${@:3:2} 截取参数列表$@中第3个开始的2个参数
${param:-word} 若$param为空或未设置,则参数式返回word,$param不变
${param:+word} 若$param为非空,则参数式返回word,$param不变
${param:=word} 若$param为空或为设置,则参数式返回word,同时$param设置为word
${param:?message} 若$param为空或为设置,则输出错误信息message,若包含空白符,则需引号
获取路径名
使用\({},\){str%/*}
去掉变量var从右边算起的第一个’/’字符及其右边的内容,返回从右边算起的第一个’/’(不含该字符)的左边的内容。使用例子及结果如下:
str=/home/luna/Desktop/Software/softHLA/HLAreporter.v103/HLAreporter.sh
path=${str%/*}
echo $path
/home/luna/Desktop/Software/softHLA/HLAreporter.v103
Linux shell中提取文件名和路径的更多相关文章
- Linux shell 中提取zip或jar文件中的某个文件
Linux shell 中提取zip或jar文件中的某个文件 假如有个压缩包 abc.jar, 里面文件如下 (可以用unzip -l abc.jar 查看): data/1.txt data/2.t ...
- Linux shell 之 提取文件名和目录名的一些方法
很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等.例如,从路径/dir1/dir2/file.tx ...
- Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)
case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下: case $变量名 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认执行的命令序列 ...
- Linux shell中的一个问题 ${}带正则匹配的表达式
目前在准备龙芯项目的PMON,在研究其编译过程的时候,看到一些make 语句,百思不得其解.后来在shell编程中看到一点资料,牵扯到Shell中的正则表达式.故记录下来,以备后来查阅. 问题: 在某 ...
- linux Shell中常用的条件判断
linux Shell中常用的条件判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d ...
- linux shell 中的sleep命令
开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...
- 理解 Linux shell 中的一个方言:2>&1
理解 Linux shell 中的一个方言:2>&1 2016-11-14 杜亦舒 前言 在使用 linux 命令或者 shell 编程时,这个用法常会遇到 2>&1 如 ...
- linux shell 中的位置变量
对于linux shell 中的位置变量,我一直以来都是吐不出来又咽不下去,每次看到都不懂,不懂了就去百度google,看完了又忘,真是慢性咽炎啊.现在认真想想也是,其实自己一直以来都没有好好学习过, ...
- Linux shell中的竖线(|)——…
原文地址:Linux shell中的竖线(|)--管道符号作者:潇潇 管道符号,是unix一个很强大的功能,符号为一条竖线:"|". 用法: command 1 | command ...
- [转载]Linux shell中的竖线(|)——管道符号
原文地址:Linux shell中的竖线(|)--管道符号作者:潇潇 管道符号,是unix一个很强大的功能,符号为一条竖线:"|". 用法: command 1 | command ...
随机推荐
- 监控系统open-falcon安装部署
目录 官方文档 安装包下载地址 环境准备 安装redis 安装mysql 安装git 安装GO 安装后台 部署前端: 邮件报警 修改ALARM配置 修改报警接口 报警测试邮件展示 Q&A 官方 ...
- 【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (二)
问题描述 在上一篇博文([Azure 存储服务].NET7.0 示例代码之上传大文件到Azure Storage Blob (一):https://www.cnblogs.com/lulight/p/ ...
- 【Azure Developer】Springboot 集成 中国区的Key Vault 报错 AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found
问题描述 Springboot 集成azure keyvault 报错,代码参考的官方文档:https://docs.microsoft.com/en-us/azure/developer/java/ ...
- MongoDB下载和可视化工具NoSQL Manager for MongoDB 软件的下载,连接数据库
在官网下载MongoDB的版本为4.0.28,之前试了好几个高版本和低版本,都不行,最后,4.0.28版本好了.下载网页:https://www.mongodb.com/try/download/co ...
- Kconnect使用sftp windows自定义协议
终于有时间写点东西了,上次写东西已经是三个月之前了.自从出现了觉得一个月写一篇文章也没关系的想法之后就已经完全忘记有这回事儿了.一直觉得没有足够的时间,但是又想写出质量比较好的文章,所以就一直没有动笔 ...
- vue配置scss全局样式
安装插件 npm install sass --save-dev 在src文件夹下创建styles文件夹,并创建以下文件 index.scss: scss的入口文件 // 引入清除默认样式 @impo ...
- FreeRTOS教程2 任务管理
1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...
- Zabbix“专家坐诊”第195期问答汇总
问题一 Q:麻烦请教一下zabbix服务器总是上报这几个告警,需要处理嘛?怎么处理? A:同步历史数据进程负载过高的话会影响到server的性能,建议增加服务器硬件配置. Q:是需要增加哪方面的配置, ...
- mainWindow = new BrowserWindow 打开慢的原因 electron 已解决 Windows Defender 拦截导致
Windows Defender 导致拦截 不是变量的事儿 解决方案: win10 开始 设置 - windows 安全中心 - 病毒和威胁防护 - 病毒和威胁防护设置 - 排除项 - 添加排除项 将 ...
- 跨域! dev: 'http://192.168.40.81:9090/xxx-api/' 平台和项目 两个都要改 要不会跨域!跨域!跨域!
跨域! dev: 'http://192.168.40.81:9090/xxx-api/' 平台和项目 两个都要改 要不会跨域!跨域!跨域!