【发布时间】: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 版本)。