bash - 属性扩展子串,在第 N 次出现时获取一个子串
问题描述
假设我有一个文件名:
Filename=AB123_10_001_00202.jpg
尽可能多地使用bash
“属性扩展子字符串”,我想提取“202”或一般没有“_00”的数字。
如果我做:
Name=${Filename%.jpg}
我得到:
AB123_10_001_00202
但是,随着许多“_0”的出现,我不知道如何进行。所以我尝试了:
Number=${Name##*_0}
...例如,在最后一位数字是 12、123 或 1234 的情况下有效。但如果“_0”介于 202 等数字之间,我只会得到“2”。
解决方案
使用参数扩展删除前导零很棘手。您可以通过解释数字来删除它们:
Filename=AB123_10_001_00202.jpg
Name="${Filename%.jpg}"
PaddedNumber="${Name##*_}"
(( Number = "10#$PaddedNumber" ))
或者,使用 bash 的匹配运算符
Filename=AB123_10_001_00202.jpg
Regex='.*_0*([0-9]+)'
[[ "$Filename" =~ $Regex ]]
Number="${BASH_REMATCH[1]}"
推荐阅读
- excel - 通过 excel vba 实现的 IE 自动化失去了对新 URL 的关注
- java - 获取 JList 组件的问题
- java - 从客户端(Android-Mobile)向服务器(Python)发送消息
- c - 打印文件的特定行
- jquery - 创建可在 Spotfire 仪表板的所有选项卡中使用的浮动文档属性控件
- tensorflow - 如何导入特定版本的 Tensorflow.js?
- php - 使用 verot class.upload.php 在数组中上传
- pyspark - 基于列存储索引创建新数据框
- javascript - 将 ViewBag 更改为 Json 数组以在 .net MVC 中绘制条形图
- c - 使用指针分配值/仅正常分配之间的区别?