网站首页 > 技术教程 正文
最近处理docker registry镜像仓库,需要提取文件和路径,所以大概总结了下shell下提取文件和路径的方式。
示例字符串
strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link"
strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data"
registry镜像的link路径以及data路径。/docker/registry/v2/。
01 获取文件名
basename命令
CentOS7 shell的软件coreutils提供了basename,从字符串中去除目录,来提取文件名。
strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link"
strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data"
# basename "$strings_link"
link
# basename "$strings_data"
data
# realpath "$strings_link"
/app/registry/docker/registry/v2/repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link
basename不会去判断文件或者路径是否真实存在,只是字符串处理,最后一个字符/后的字符串提取。
realpath是提去文件的绝对路径。
awk命令
awk是通过分隔符'/',提取最后一列数据即为文件名。
strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link"
strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data"
# echo "$strings_link" |awk -F'/' '{print $NF}'
link
# echo "$strings_data" |awk -F'/' '{print $NF}'
data
NF(The number of fields)为当前输入记录的字段数,即最后一列。
shell ${}处理,${var##*/}
${strings_link##*/}:去掉变量从左边算起的最后一个/字符及其左边的内容,保留的值是左边从最后一个/(不包含)的右边所有内容。
strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link"
strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data"
# echo ${strings_link##*/}
link
# echo ${strings_data##*/}
data
#是删除左边最小匹配,##删除左边最大匹配;%是删除右边最小匹配,%%删除右边最大匹配;
换句话来说,#总是表示左边算起,%总是表示右边算起。
02 获取路径
dirname命令
CentOS7 shell的软件coreutils提供了dirname,从字符串中去除文件名,来提取目录。
strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link"
strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data"
# dirname "$strings_link"
repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872
# dirname "$strings_data"
blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e87
dirname不会去判断文件或者路径是否真实存在,只是字符串处理,最后一个字符/前的字符串提取。
awk命令
awk的分隔符也可以是正则表达式,'/[^/]*#39;或者'/[^/]+#39;是匹配到/link做分隔符,$1即为目录。
strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link"
strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data"
# echo $strings_link |awk -F '/[^/]*#39; '{print $1}'
repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872
# echo $strings_data |awk -F '/[^/]*#39; '{print $1}'
blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872
在线正则表达式测试
shell ${}处理,${var%/*}
${strings_link%/*}:去掉从右边起第一个/字符串及其右边的内容,保留从右边起第一个/(不包含)的左边的所有内容。
strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link"
strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data"
# echo "${strings_link%/*}"
repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872
# echo "${strings_data%/*}"
blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872
- 上一篇: 每天一个技术知识:Linux的目录结构
- 下一篇: 一文带你了解 Linux 文件权限,从基础到高级
猜你喜欢
- 2025-05-05 超级好用的C++实用库之文件目录操作
- 2025-05-05 Linux的文件类型(linux的文件类型后缀)
- 2025-05-05 linux学习之系统目录(linux目录项是什么)
- 2025-05-05 在Unix/Linux中如何创建目录副本(linux创建目录用什么命令)
- 2025-05-05 用了这么久 Linux,才知道这些概念
- 2025-05-05 一文带你了解 Linux 文件权限,从基础到高级
- 2025-05-05 每天一个技术知识:Linux的目录结构
- 2025-05-05 玩转 Linux 之:磁盘分区、挂载知多少?
- 2025-05-05 Linux怎么复制文件到其他文件夹(linux 如何复制一个文件的内容到另一文件)
- 2025-05-05 C盘在哪儿?Windows、Linux的不同之处
你 发表评论:
欢迎- 最近发表
-
- linux日志文件的管理、备份及日志服务器的搭建
- Linux下挂载windows的共享目录操作方法
- Linux系统中的备份文件命令(linux系统中的备份文件命令有哪些)
- 麒麟KYLINOS|通过不同方法设置用户访问文件及目录权限
- 「Linux笔记」系统目录结构(linux目录的结构及含义)
- linux中修改归属权chown命令和chgrp命令
- 工作日报 2021.10.27 Android-SEAndroid权限问题指南
- Windows和Linux环境下,修改Ollama的模型默认保存路径
- 如何强制用户在 Linux 上下次登录时更改密码?
- 如何删除Linux文件夹中除某些扩展名之外的所有文件?
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)