我在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 :(得分:2)
您为此类任务定义一个正则表达式。假设尺寸遵循问题[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]}" ; }