我有一个像这样的HTML文件:
<html><head>
<title>My Title</title>
</head>
<body>
Title of this page: PAGE_TITLE
</body>
</html>
如何在标题上替换PAGE_TITLE?
我尝试这个命令:
sed -i 's/\(.*?<title>\)\(.*?\)\(<\/title>.*?\)PAGE_TITLE/\1\2\3\2/' page.html
但它没有用。
答案 0 :(得分:3)
不要使用正则表达式来解析HTML。使用适当的解析器&amp; xpath:
# fetch title string
title=$(xml sel -t -v /html/head/title file.html)
# edit file in-place
xml ed -L -u '/html/body/text()' -v "Title of this page: $title" file.html
xml
是xmlstarlet
答案 1 :(得分:1)
使用awk
:
awk '/<title>/ { title = $0; sub(".*<title>", "", title); sub("</title>.*", "", title)}
/PAGE_TITLE/ { sub("PAGE_TITLE", title); }
1' filename > filename.new
答案 2 :(得分:0)
您的sed
脚本存在的问题是您使用的是*?
,这是一个不受支持的正则表达式扩展程序。您可以使用[^<>]*
代替.*?
获得相同的结果。
此外,HTML <title>
中不允许使用<body>
元素,因此您不应该包含它;您正在创建无效的HTML。