首页 > 解决方案 > 如何使用 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]/}"

标签: bashmacos

解决方案


您为此类任务定义了一个正则表达式。假设您的尺寸遵循问题中的语法,[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]}" ; }

推荐阅读