Shell路径变量切割

目录

使用参数扩展来切割路径

1. 获取文件名部分

2. 获取目录部分

3. 获取文件扩展名

4. 获取没有扩展名的文件名

使用命令行工具来切割路径

1. 获取文件名 basename

2. 获取目录名 dirname

总结:

# 和 ## 用于删除字符串前缀

% 和 %% 用于删除字符串后缀

实例应用

总结对比

Shell字符串变量切割替换-CSDN博客


使用参数扩展来切割路径

参数扩展是 Bash 中一种非常强大的特性,可以高效地操作字符串。以下是一些常用的参数扩展方法来切割路径并获取其各个部分:

1. 获取文件名部分

如果有一个路径,并且想要提取文件名部分,可以使用 ${var##*/} 语法:

file_path="/path/to/your/file.txt"
file_name=${file_path##*/}  # 输出:file.txt
echo $file_name

解释:##*/ 移除变量从左端开始到最后一个斜杠(/)之间的所有内容,包括斜杠本身。

2. 获取目录部分

如果想要获取路径中的目录部分,可以使用 ${var%/*} 语法:

file_path="/path/to/your/file.txt"
dir_path=${file_path%/*}  # 输出:/path/to/your
echo $dir_path

解释:%/* 移除从变量右端开始到第一个斜杠(/)之间的所有内容,包括斜杠本身。

3. 获取文件扩展名

要获取路径中文件的扩展名,可以使用 ${var##*.} 语法:

file_path="/path/to/your/file.txt"
file_extension=${file_path##*.}  # 输出:txt
echo $file_extension

解释:##*. 移除变量从左端开始到最后一个点(.)之间的所有内容,包括点本身。

4. 获取没有扩展名的文件名

如果需要获取文件名而不包含扩展名,可结合使用 ${var##*/} 和 ${var%.*} 语法:

file_path="/path/to/your/file.txt"
file_name=${file_path##*/}       # file_name = "file.txt"
base_name=${file_name%.*}  # 输出:file
echo $base_name

解释:

  • file_name=${file_path##*/} 获取文件名 file.txt
  • base_name=${file_name%.*} 获取文件名不带扩展名的部分 file

使用命令行工具来切割路径

命令行工具如 basename 和 dirname 也经常用来切割路径。

1. 获取文件名 basename
file_path="/path/to/your/file.txt"
file_name=$(basename "$file_path")  # 输出:file.txt
echo $file_name# 只获取文件名不包含扩展名:
base_name=$(basename "$file_path" .txt)  # 输出:file
echo $base_name

2. 获取目录名 dirname
file_path="/path/to/your/file.txt"
dir_name=$(dirname "$file_path")  # 输出:/path/to/your
echo $dir_name

总结:

符号含义和使用方法

# 和 ## 用于删除字符串前缀
  • #:删除最小匹配的前缀。

  • ##:删除最大匹配的前缀。

示例使用:

file_path="/path/to/your/file.txt"# 使用 # 符号
echo ${file_path#*/}    # 输出:path/to/your/file.txt
echo ${file_path#*/to}  # 输出:/your/file.txt# 使用 ## 符号
echo ${file_path##*/}   # 输出:file.txt
echo ${file_path##*/to/}  # 输出:your/file.txt

解释:

  • ${file_path#*/}:删除第一个 / 及其之前的部分。
  • ${file_path##*/}:删除最后一个 / 及其之前的所有部分(剩下最后的文件名)。
  • ${file_path#*/to}:删除第一个 /to 及其之前的部分。
  • ${file_path##*/to/}:删除最后一个 /to/ 及其之前的所有部分。

% 和 %% 用于删除字符串后缀
  • %:删除最小匹配的后缀。
  • %%:删除最大匹配的后缀。

示例使用:

file_path="/path/to/your/file.txt"# 使用 % 符号
echo ${file_path%/*}    # 输出:/path/to/your
echo ${file_path%.*}    # 输出:/path/to/your/file# 使用 %% 符号
echo ${file_path%%/*}   # 输出:(空字符串,因为匹配到了最左边的整个路径字符串)
echo ${file_path%%.*}   # 输出:/path/to/your/file(因为匹配到了最右边的点之前的所有部分)

解释:

  • ${file_path%/*}:删除最后一个 / 及其之后的部分。
  • ${file_path%.*}:删除最后一个 . 及其之后的部分。
  • ${file_path%%/*}:删除最左侧第一个 / 及其之后的所有部分(返回空字符串)。
  • ${file_path%%.*}:删除最右侧第一个 . 及其之后的所有部分。

实例应用

结合上述符号的使用方法,可以完成许多有用的路径字符串操作。这些操作常见于脚本中,帮助处理各种路径和文件名。

完整实例

file_path="/home/user/documents/data/report.txt"# 删除第一个斜杠及其之前的所有部分
echo ${file_path#*/}      # 输出:home/user/documents/data/report.txt# 删除最后一个斜杠及其之前的所有部分(获取文件名)
echo ${file_path##*/}     # 输出:report.txt# 删除最后一个点及其之后的所有部分(获取不带扩展名的文件名)
echo ${file_path%.*}      # 输出:/home/user/documents/data/report# 删除最后一个斜杠及其之后的所有部分(获取目录路径)
echo ${file_path%/*}      # 输出:/home/user/documents/data# 删除最左侧第一个斜杠及其之前的所有部分(获取最左侧的目录)
echo ${file_path%%/*}     # 输出:(空字符串,因为匹配到最左侧)# 删除最右侧第一个点及其之前的所有部分(获取最右侧的目录路径)
echo ${file_path%%.*}     # 输出:/home/user/documents/data/report

总结对比

符号使用情况输出例子(对于 /path/to/your/file.txt
#移除最小匹配的前缀${file_path#*/} -> path/to/your/file.txt
##移除最大匹配的前缀${file_path##*/} -> file.txt
%移除最小匹配的后缀${file_path%/*} -> /path/to/your
%%移除最大匹配的后缀${file_path%%/*} -> (空字符串)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIA--OSPF实验(复习)

实验拓扑&#xff1a; 实验思路&#xff1a; 1.规划IP&#xff0c;配置环回&#xff0c;接口IP 2.把R1&#xff0c;R2优先级改为0&#xff0c;让R1、R2放弃选举&#xff0c; [r1]interface g0/0/0 [r1-GigabitEthernet0/0/0]ospf dr-priority 0 <r1>reset ospf…

C语言:IO操作

引言 I/O操作是一切实现的基础。IO即为input &output 标准IO&#xff08;stdio&#xff09; FILE类型贯穿始终&#xff0c;FILE是由typedef定义出来的 vii /usr/include/asm-generic/errno-base.h (errno定义的位置) /usr/include/x86_64-linux-gnu/bits/types/struct…

12-从URL到页面:探寻Web页面渲染的全过程

从URL到页面&#xff1a;探寻Web页面渲染的全过程 笔记分享 在我们浏览网页时&#xff0c;从输入URL到最终页面呈现在浏览器上&#xff0c;这背后发生了一系列复杂的步骤。本文将详细介绍这个过程&#xff0c;包括TCP连接的建立与终止。 1. DNS解析 当你在浏览器中输入一个U…

工业自动化喷涂生产线设计方案

利用机械臂代替人工进行喷涂工艺生产线的设计实现方案可以减少人工成本&#xff0c;同时提高整厂自动化程度&#xff0c;提高生产效率&#xff0c;改善工人办公环境&#xff0c;本文简单介绍如何利用机械臂代替人工进行自动化喷涂生产线设计。 整体布置包括利用三台埃夫特机械臂…

Github 2024-06-04 Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-04统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10Shell项目1TypeScript项目1yt-dlp: 一个增强版的youtube-dl分支 创建周期:1184 天开发语言:Python协议类型:The UnlicenseStar数…

数据结构——哈希表、哈希桶

哈希概念 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过关键码的多次比较&#xff0c;顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(logN),搜索的效率取决于搜索过程种元素的比较次…

ElasticSearch学习笔记之一:介绍及EFK部署

1. 系统概述 The Elastic Stack&#xff0c;包括Elasticsearch、Kibana、Beats和Logstash&#xff08;也成为ELK Stack&#xff09; Elasticsearch&#xff1a;简称ES&#xff0c;是一个开源的高扩展的分布式全文搜索引擎&#xff0c;是整个Elastic Stack技术栈的核心。它可以…

docker安装redis以及持久化

为了避免当虚拟机关机后redis数据丢失的情况&#xff0c;redis需要持久化。所以要挂载数据卷 创建数据和配置存放的目录 [root192 data]# pwd /root/data [root192 data]# mkdir -p /root/data/redis/conf && chmod 777 /root/data/redis/conf [root192 data]# mkdir …

Ant Design Vue 动态表头并填充数据

在使用 Ant Design Vue 动态生成表头并填充数据时&#xff0c;你需要以下几个关键步骤&#xff1a; 1. **安装 Ant Design Vue**&#xff1a; 确保你已经安装并配置了 Ant Design Vue。 bash npm install ant-design-vue 2. **引入 Ant Design Vue 组件**&#xff…

怎么找抖音视频素材?下载抖音的素材视频网站分享给你

在这个视觉印象至关重要的时代&#xff0c;选用高质量的视频素材对于制作抖音视频来说是关键。如果你正在寻找适合的视频素材来丰富你的抖音创作&#xff0c;以下这份详细的视频素材网站指南将帮助你迈出第一步。 蛙学府网 蛙学府网提供了丰富多样的视频素材&#xff0c;包括动…

香橙派Orange AI Pro / 华为昇腾310芯片 部署自己训练的yolov8模型进行中国象棋识别

香橙派Orange AI Pro / 华为昇腾310芯片 部署自己训练的yolov8模型进行中国象棋识别 一、香橙派简介1.1、香橙派 AI Pro 硬件资源介绍1.2、华为昇腾310&#xff08;Ascend310&#xff09; 简介1.3、 昇腾310AI能力和CANN 简介昇腾310 NPU简介 二、远程环境配置2.1、ssh2.2、vnc…

深入理解 Python3 函数:从基础语法到高级应用

Python3 函数是构建模块化代码的基本单位&#xff0c;允许我们将代码组织成独立的、可重用的块。本文将详细介绍 Python3 函数的基本语法、常用命令、示例、应用场景、注意事项&#xff0c;并进行总结。 基本语法 在 Python 中&#xff0c;函数的定义使用 def 关键字&#xf…

VScode中Markdown图片尺寸大小调整

自存用&#xff0c;不保证适用于所有人 默认情况 ![图片描述](2024-06-03-11-57-36.png)图片居中且改变尺寸 <div aligncenter><img src"2024-06-02-15-09-50.png" width"400"></div>"2024-06-02-15-09-50.png"是图片链接&…

HTML5 Canvas 绘图教程二

在本教程中&#xff0c;我们将探讨 canvas 的高级用法&#xff0c;包括复杂的绘图 API、坐标系统和变换操作、平滑动画技术以及复杂应用和游戏开发的实践。 1. 绘图 API 高级方法 1.1 二次贝塞尔曲线 (quadraticCurveTo) 二次贝塞尔曲线需要两个点&#xff1a;一个控制点和一…

沈阳 2024年 融资融券怎么开通,利率多少?

融资融券是什么&#xff0c;为什么能赚钱&#xff0c;怎么赚更多&#xff0c;怎么少付利息 100个4.2% 如果你发现了好股票、好机会&#xff0c;但目前券商的融资利率较高&#xff0c;可以考虑转户并选择低利率的券商&#xff0c; 同时需要注意开通条件和转户产生的成本费用。…

新书推荐:1.3 内存管理模式

本节必须掌握的知识点&#xff1a; 4GB虚拟空间 虚拟内存 多任务切换 1.3.1 4GB虚拟空间 ■Win16操作系统 Windows1.0版本为16位操作系统&#xff0c;支持16位处理器实模式&#xff0c;最大寻址空间为1MB。Win16操作系统的内存管理非常简单&#xff0c;采用分段内存管理模式…

I.MX RT1170之MIPI DSI初始化和显示流程详解

MIPI DSI&#xff08;Mobile Industry Processor Interface Display Serial Interface&#xff09;是一种广泛应用于移动设备显示屏的接口标准。由MIPI联盟制定&#xff0c;DSI接口旨在提供高效、低功耗的显示屏数据传输解决方案。 本节来就通过学习I.MX RT1170单片机中的MIPI…

【Linux】Linux项目自动化构建工具——make/Makefile

1.背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的 规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件需…

Java集合思维导图

详细内容请看链接内容 Java集合面试题集——2024最新大厂面试

用于对话场景的文本转语音-chattts

网址 https://chattts.com/zh 多语言支持 ChatTTS 的一个关键特性是支持多种语言&#xff0c;包括英语和中文。这使其能够为广泛用户群提供服务&#xff0c;并克服语言障碍 大规模数据训练 ChatTTS 使用了大量数据进行训练&#xff0c;大约有1000万小时的中文和英文数据。这…