regex - 如何在 bash 脚本中使用 Regex for Grep 选择图像 URL?
问题描述
我有一个文本文件,我需要在其中使用 bash 脚本为图像选择 URL。文本文件中的一行示例:
<icon height="36" width="36" density="ldpi" src="res/icon/android/ldpi.png"/>
我使用正则表达式编写了以下脚本:
echo $line | grep -E -o "[^\"\'=\s]+\.(jpe?g|png|gif)"
输出显示:/icon/android/ldpi.png
但是,我需要:res/icon/android/ldpi.png
任何人都可以帮助解决问题并做出正确的输出res/icon/android/ldpi.png
吗?先感谢您!
解决方案
在这里,\s
不被识别grep
为空白匹配模式,它匹配\
并且s
包含res
它s
不匹配。
你可以试试
grep -Eo "[^\"'=[:space:]]+\.(jpe?g|png|gif)" <<< "$line"
或者,使用 Bash 正则表达式匹配:
rx="src=([\"'])([^\"']+\.(jpe?g|png|gif))\1"
if [[ "$line" =~ $rx ]]; then
echo "${BASH_REMATCH[2]}";
fi;
查看在线演示
模式src=([\"'])([^\"']+\.(jpe?g|png|gif))\1
匹配
src=
- 文字子串([\"'])
- 第 1 组:a"
或'
([^\"']+\.(jpe?g|png|gif))
- 第 2 组(在找到匹配项后可通过此值访问"${BASH_REMATCH[2]}"
):任何 1+ 个字符,除"
并'
后跟.
andjpeg
,jpg
,png
,gif
\1
- 组 1 值。
推荐阅读
- flutter - 需要管理列高并将变量作为小部件属性传递
- arrays - Swift Core Data - 数组未正确加载
- sql - Oracle中同一表中2列的唯一索引/约束
- angular - firebase 值更改后执行任务
- codeceptjs - Conceptjs:在一个浏览器中运行多个场景,而不是为每个场景打开一个新浏览器
- python - 为列列表中的任何列是否包含值创建一个虚拟对象
- amazon-web-services - 将 JupyterHub 应用状态迁移到新的 k8s 集群?(AWS EKS)
- php - 当查询字符串连接/替换 PHP 中的变量时,MySQL 查询不起作用
- regex - Google Script 正则表达式从详细信息返回匹配模式列表
- windows - Why I am having double Multiple times When I read Arrow Keys from Console?