首页 > 系统相关 >Linux shell中提取文件名和路径

Linux shell中提取文件名和路径

时间:2023-07-22 13:11:59浏览次数:54  
标签:shell str 文件名 pattern param sh file Linux HLAreporter

本文地址: 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

标签:shell,str,文件名,pattern,param,sh,file,Linux,HLAreporter
From: https://www.cnblogs.com/wanger-sjtu/p/17561896.html

相关文章

  • linux找回root密码
    1、重启linux系统,移动光标至图中位置,然后按'e'键2、找到linux16...,将光标移至段落最后3、输入init=/bin//sh,然后ctrl+x,进入单用户模式 4、输入mount-oremount,rw/然后回车注意每个单词之间都有空格5、输入passwd,然后输入密码(不少于8位)6、输入touch/.aut......
  • Linux 安装常用工具,必备
    Linux安装常用工具,必备刚装的CentOS,有些工具有,有些没有,所以我会习惯性地装如下工具、yuminstalliprouteftpbind-utilsnet-toolswget-y其中:iproute用来执行ipaddress查看本机地址ftp用来测试ftp服务器bind_utils用来运行nslookupnet-tools用来执行ne......
  • linux java启动脚本示例
    start.sh#!/bin/bashnohup/usr/jdk1.8.0_102/bin/java-jar-Xms400m-Xmn200m-Xmx500m-Dtwasp.config.uri=http://192.168.128.132:9300/configs-Deureka.client.serviceUrl.defaultZone=http://192.168.128.132:9100/eureka/-Deureka.client.register-with-eureka=t......
  • linux常用命令
    转载文章作者:Gallifrey文章链接:https://gallifrey.asia/posts/fb2c02db1a9f/ 前言本文是视频教程韩顺平一周学会Linux部分章节的归纳总结,内容补充和错误纠正。概述Linux命令是一组用于在Linux操作系统上执行特定任务的命令。这些命令可以在终端窗口中使用,也可以通过......
  • linux 常用的命令
    linux常用命令防火墙相关命令安装防火墙yum-yinstallfirewalldfirewall-config防火墙生命周期管理1、为了启动防火墙,要先重启下dbus..systemctlrestartdbus2、然后通过如下命令进行防火墙生命周期管理启动一个服务:systemctlstartfirewalld.service关闭一个......
  • PowerShell命令卸载 Windows系统预装内置软件
    一、【核心命令】 Get-AppxPackage-AllUsers /*获取Win10以上系统(所有用户)预装软件*/ Get-AppxPackage-AllUsers{预装软件全名}|Remove-AppxPackage/*管道方式卸载Win10以上系统预装软件*/ Remove-App......
  • linux 中 根据制定列标签展开为两列以及依据两列信息进行合并
     001、[root@PC1test05]#lsresult.txt[root@PC1test05]#catresult.txt##测试数据223669237092235172369632351523708323556237134234762371142362223720......
  • Linux中time命令输出的Real time, User time and Sys time
    在运行的程序之前加time最后得出三个时间real、 user、sys,real是程序的实际运行时间,sys是内核态的时间,user是用户态的时间,单核情况,real远远大于user和sys之和。real,从程序开始到程序执行结束时所消耗的时间,包括CPU的用时和所有延迟程序执行的因素的总和。CPU用时被划分为u......
  • Linux 操作系统预习提纲
    以下是Linux操作系统的预习提纲的Markdown格式示例:Linux操作系统预习提纲1.Linux基础知识Linux操作系统的起源与发展Linux发行版的选择与常见发行版介绍Linux文件系统与目录结构Linux用户与权限管理2.LinuxShell基础Shell的概念与常见Shell的介绍常......
  • Arch Linux install i3-wm
    ArchLinuxinstalli3-wm简介i3-wm是一种动态的平铺式窗口管理器,它的设计目标是提供一个快速、简洁、可定制的桌面环境,适合开发者和高级用户使用。它有以下几个特点:它使用树形结构来管理窗口,可以灵活地分割、组合、切换窗口。它支持多种操作模式,类似于vim,可以通过快捷键执......