bash - 如何使用 bash 从 URL 字符串中获取维度
问题描述
我在 mac 上使用 bash 并有一个 URL 字符串,我想从包含如下任何尺寸的 url 中提取宽度和高度值:
url=domain.com/project/asset_300x250_july2/
url=domain.com/project/300x250_asset_july2/
url=domain.com/project/asset_300x250/
我想我需要搜索“x”之前出现的数字,然后搜索“x”之后的数字。有没有简单的方法来获得这个?与此类似的东西,它只提取所有数字:
width="${url//[!0-9]/}"
解决方案
您为此类任务定义了一个正则表达式。假设您的尺寸遵循问题中的语法,[0-9]x[0-9]
您可以执行以下操作。
中的正则表达式支持bash
允许匹配和捕获字符串,这些字符串将填充到数组中BASH_REMATCH
。匹配元素的索引从 1 开始
可以详细编写一个适当的脚本,如下所示。
#!/usr/bin/env bash
regex='([[:digit:]]{1,})x([[:digit:]]{1,}).*$'
if [[ $url =~ $regex ]]; then
printf '%s x %s\n' "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
fi
它的命令行友好版本将是
[[ $url =~ $regex ]] && { width="${BASH_REMATCH[1]}"; height="${BASH_REMATCH[2]}" ; }
推荐阅读
- bash - tmp 中超过 90 天的目录 | root 权限被拒绝 | 读写的所有问号| 用户可以看到 root 拥有 dir
- javascript - 将 onChange 处理程序添加到 svelte 中的输入
- javascript - 如何使用 new Map() 设置地图的初始值?
- javascript - “未捕获的语法错误:导入声明可能只出现在模块的顶层”:1:18 再次询问
- c# - 如何使用 InMemory 测试 Entity Framework Core 数据库,并为大量行提供插入功能
- c# - 对于 Snowflake .NET 连接器,我可以在原始(Pascal)外壳中获取列名吗?
- amazon-web-services - [XX000][500310] [Amazon](500310) 无效操作:解析的清单不是有效的 JSON 对象
- c - C中的字符串如何分配指向char的指针?
- python - 是否可以使用 camelot 仅从 pdf 中提取表格?它应该只检测表格而不是文本
- r - R igraph:在 igraph 中寻找最短路径,为其添加权重并寻找替代路径