Linux 中如何对变量进行切分截取?获取文件的扩展名

简介: Linux 中如何对变量进行切分截取?获取文件的扩展名

${VAR%.*} 的含义

❏ 从 $VAR中删除位于%右侧的通配符(在上例中是.*)所匹配的字符串。通配符从右向左进行匹配。

❏ 给VAR赋值,即VAR=sample.jpg。通配符从右向左匹配到的内容是.jpg,因此从$VAR中删除匹配结果,得到输出sample。

%属于非贪婪(non-greedy)操作。它从右向左找出匹配通配符的最短结果。

还有另一个操作符%%,它与%相似,但行为模式却是贪婪的,这意味着它会匹配符合通配符的最长结果。

例如

[root@hadoop100 test]# url="www.google.com.hk"
[root@hadoop100 test]#
# 使用%操作符从右向左执行非贪婪匹配
[root@hadoop100 test]# echo ${url%.*}
www.google.com
#使用%%操作符从右向左执行贪婪匹配
[root@hadoop100 test]# echo ${url%%.*}
www

不同分隔符都可以这样使用

[root@hadoop100 test]# a="www-google-com-hk"
[root@hadoop100 test]#
[root@hadoop100 test]#
[root@hadoop100 test]# echo ${a%.*}
www-google-com-hk
[root@hadoop100 test]# echo ${a%-*}
www-google-com
[root@hadoop100 test]# echo ${a%%-*}
www

${VAR#*.}的含义

#操作符可以从文件名中提取扩展名。这个操作符与%类似,不过求值方向是从左向右

从$VARIABLE中删除位于#右侧的通配符(即在上例中使用的*.)从左向右所匹配到的字符串。和%%类似,

#也有一个对应的贪婪操作符##。##从左向右进行贪婪匹配,并从指定变量中删除匹配结果。来看一个例子:

# 使用#操作符从左向右执行非贪婪匹配
[root@hadoop100 test]# echo ${url#*.}
google.com.hk
[root@hadoop100 test]#
# 使用##操作符从左向右执行贪婪匹配
[root@hadoop100 test]# echo ${url##*.}
hk

考虑到文件名中可能包含多个.字符,所以相较于#,##更适合于从中提取扩展名。##执行的是贪婪匹配,因而总是能够准确地提取出扩展名

--update 2023年5月5日11:34:56

实例

for i in ${images};do echo ${i} ; echo ${i##*/} ;done
registry.cn-hangzhou.aliyuncs.com/kainstall/kube-apiserver:v1.22.10
kube-apiserver:v1.22.10
registry.cn-hangzhou.aliyuncs.com/kainstall/kube-scheduler:v1.22.10
kube-scheduler:v1.22.10
registry.cn-hangzhou.aliyuncs.com/kainstall/kube-controller-manager:v1.22.10
kube-controller-manager:v1.22.10
registry.cn-hangzhou.aliyuncs.com/kainstall/kube-proxy:v1.22.10
kube-proxy:v1.22.10
rancher/mirrored-flannelcni-flannel:v0.16.3
mirrored-flannelcni-flannel:v0.16.3
rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1
mirrored-flannelcni-flannel-cni-plugin:v1.0.1
registry.cn-hangzhou.aliyuncs.com/kainstall/etcd:3.5.0-0
etcd:3.5.0-0
registry.cn-hangzhou.aliyuncs.com/kainstall/coredns:v1.8.4
coredns:v1.8.4
registry.cn-hangzhou.aliyuncs.com/kainstall/pause:3.5
pause:3.5

tr、sed、变量替换伯仲之间

#!/usr/bin/env bash
#echo 'text here'
string="stirng" ; echo "$string" | sed -e "s/ir/ri/"
# 效率高于sed ,参见https://www.shellcheck.net/wiki/SC2001
string="stirng" ; echo "${string//ir/ri}"
# 获取最后一个字符
string="stirng" ; echo "$string" | sed -e "s/^.*\(.\)$/\1/"
url=/dfs/acf/A1575A1BPK1/A1298/A129803C/A129803CAR/FORMAT/A3353A129803CAR.TXT
# 获取文件名
#basename ${url}
# 获取路径
#dirname ${url}
# 变量截取从右向左非贪婪匹配,也就是说匹配到一个/就停止
echo ${url%/*}
# output:  /dfs/acf/A1575A1BPK1/A1298/A129803C/A129803CAR/FORMAT
# 变量截取从左向右贪婪匹配,也就是说从左往右贪婪匹配/,直到最后一个才停止
echo ${url##*/}
# output: A3353A129803CAR.TXT
echo -en '12345\n6789' | tr '\n' ','
echo
echo "${url}" | tr -d '/' 
echo "${url}" | tr -s '/' '\'

0d265ac2a42e4d04a019c24ab8c61b5f.png

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
1月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
73 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
23天前
|
Ubuntu Linux Go
golang编译成Linux可运行文件
本文介绍了如何在 Linux 上编译和运行 Golang 程序,涵盖了本地编译和交叉编译的步骤。通过这些步骤,您可以轻松地将 Golang 程序编译成适合 Linux 平台的可执行文件,并在目标服务器上运行。掌握这些技巧,可以提高开发和部署 Golang 应用的效率。
175 14
|
22天前
|
存储 NoSQL Linux
linux积累-core文件是干啥的
核心文件是Linux系统在程序崩溃时生成的重要调试文件,通过分析核心文件,开发者可以找到程序崩溃的原因并进行调试和修复。本文详细介绍了核心文件的生成、配置、查看和分析方法
77 6
|
24天前
|
存储 NoSQL Linux
linux之core文件如何查看和调试
通过设置和生成 core 文件,可以在程序崩溃时获取详细的调试信息。结合 GDB 等调试工具,可以深入分析 core 文件,找到程序崩溃的具体原因,并进行相应的修复。掌握这些调试技巧,对于提高程序的稳定性和可靠性具有重要意义。
179 6
|
2月前
|
Linux 开发工具 Perl
在Linux中,有一个文件,如何删除包含“www“字样的字符?
在Linux中,如果你想删除一个文件中包含特定字样(如“www”)的所有字符或行,你可以使用多种文本处理工具来实现。以下是一些常见的方法:
48 5
|
2月前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
61 6
|
2月前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
205 6
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
223 8
|
2月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
892 6
|
2月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
142 3

热门文章

最新文章