网站首页 > 技术教程 正文
最近处理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/linkbasename不会去判断文件或者路径是否真实存在,只是字符串处理,最后一个字符/后的字符串提取。
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}'
dataNF(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/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e87dirname不会去判断文件或者路径是否真实存在,只是字符串处理,最后一个字符/前的字符串提取。
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的不同之处
欢迎 你 发表评论:
- 12-13360浏览器官网在线使用
- 12-13一键系统备份工具(一键系统备份软件)
- 12-132345浏览器影视大全(2345浏览器版本大全)
- 12-13office产品密钥在哪看(查看office产品密钥)
- 12-13电脑速度慢怎么清理(电脑很慢如何清理)
- 12-13w7激活工具免费下载(win7激活工具合集)
- 12-13鑫创u盘量产教程(鑫创sss6697量产教程)
- 12-13微信好友恢复破解版(微信好友恢复 破解版)
- 最近发表
- 标签列表
-
- 下划线是什么 (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)

本文暂时没有评论,来添加一个吧(●'◡'●)