【问题标题】:How to get the names of images with regular expression, sed and grep from an HTML file如何从 HTML 文件中获取带有正则表达式、sed 和 grep 的图像名称
【发布时间】:2019-04-06 23:21:16
【问题描述】:

我想使用正则表达式、grep 和 sed 在 html 文件中写出图像的名称。

这是我的 index.html 文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>TEST</title>
</head>
<body>
    <h1>Simple title</h1>
    <img src="cat.png" alt="nice cat"></img>
    <img src="carrot.jpg" alt="yumm"></img>
</body>
</html>

我有以下正则表达式:

/.*<img src="(.*?)" .*>.*/g

有了它,我在 regexr.com 上用第一组的替换功能得到了这个:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>TEST</title>
</head>
<body>
    <h1>Simple title</h1>
cat.png
carrot.jpg
</body>
</html>

但是我怎样才能只获得文件的两个名称? 我尝试使用 sed 和 grep/egrep,但没有运气。

使用 sed,我尝试了以下方法:

sed -e 's/.*<img .*src="(.*?)" .*>/\1/g' index.html  > pc_temp.txt

但这给了我一个错误:

sed: -e term # 1, character 31: invalid reference (\ 1) to the "s" command for RHS

所以我现在迷路了。

任何想法,如何修改我的命令或我的正则表达式,以获取文件的名称?

【问题讨论】:

  • 这就是使用在线工具为命令行工具创建或验证正则表达式的问题 - 每个命令行工具都支持正则表达式的特定变体(BRE、ERE 或 PCRE)并且具有需要考虑的各种选项、分隔符和注意事项,因此您使用在线工具创建/验证的任何正则表达式在尝试将其包含在命令行工具中时的适用性都非常有限。在这种情况下,没有标准的 UNIX 工具可以理解您在该网站上提出的正则表达式(有非标准工具可以理解,但没有 sed 版本)。

标签: html regex bash sed grep


【解决方案1】:
egrep -o '<img src="[^"]+"' index.html | cut -d\" -f2 > pc_temp.txt

【讨论】:

    【解决方案2】:

    您尝试使用复杂的正则表达式和多种工具确实让您很难做到这一点。每当您发现自己正在考虑使用 sed+grep 时,只需使用 awk 即可:

    $ awk -F\" '/<img/{print $2}' file
    cat.png
    carrot.jpg
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      相关资源
      最近更新 更多