Shell路径变量切割

发布于:2024-06-04 ⋅ 阅读:(133) ⋅ 点赞:(0)

目录

使用参数扩展来切割路径

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%%/*} -> (空字符串)

网站公告

今日签到

点亮在社区的每一天
去签到