Unix SED - 获取标题然后将其设置到另一个位置

Unix SED - get title then set it another place

我有一个这样的 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//' page.html

但是没用。

不要使用正则表达式来解析 HTML。使用合适的解析器 & :

# 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

检查:RegEx match open tags except XHTML self-contained tags

使用awk:

awk '/<title>/ { title = [=10=]; sub(".*<title>", "", title); sub("</title>.*", "", title)}
     /PAGE_TITLE/ { sub("PAGE_TITLE", title); }
     1' filename > filename.new

您的 sed 脚本的问题是您使用的 *? 是不受支持的正则表达式扩展。使用 [^<>]* 而不是 .*?.

可以获得大致相同的结果

此外,<title> 元素不允许出现在 HTML <body> 中,因此您不应包含它;您正在创建无效 HTML.