首页 > 解决方案 > 如何在 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吗?先感谢您!

标签: regexbashgrep

解决方案


在这里,\s不被识别grep为空白匹配模式,它匹配\并且s包含ress不匹配。

你可以试试

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+ 个字符,除"'后跟.and jpeg, jpg, png,gif
  • \1- 组 1 值。

推荐阅读