我希望能够处理存储在 bash 变量中的任何类型的内容${CONTENT}
,用作sed
另一个内容的替换文本,无论带有 CSS 的 HTML 文件是否可以包含引号、单引号或其他特殊字符,无需创建临时文件。
CONTENT=$(cat "${HTML_FILE}")
HTML=$(cat "parent_file.html" | tr -d '\n' | sed -E "s/(<body[^>]*>).*(<\/body>)/\1\n${CONTENT}\n\2/")
但这会出错,并出现如下错误:
sed: -e expression #1, char XXX: unterminated `s' command
我所要求的可能吗?
正如评论所指出的,一般情况下解析 HTML 不应该在 bash 中完成。有一些工具(例如xq)专门用于正确执行此操作。
话虽如此,对于您的具体示例,有一个简单的解决方案。因为在 HTML 中不需要遵循任何内容
</body>
,所以您可以简单地使用 sed 删除原始内容,然后分别插入您的内容以及结束标记:(为了清楚起见,我将内容保留在上面的变量中。HTML 可能会变得非常大,因此在现实生活中,我建议动态解析而不是使用中间变量。)