使用BASH关闭HTML标记后截断注释

时间:2012-01-16 21:17:48

标签: html regex linux bash

我正在尝试弄清楚如何使用bash或常见的GNU工具关闭HTML标记之后删除内容。例如,给定以下HTML模板,在不触及嵌入式注释而不使用Python等外部语言的情况下删除尾随注释的有效方法是什么?

<!DOCTYPE html>
<html>
<head>
 <title>Site | Page 1</title>
</head>
<body>

 <!-- Don't delete me! -->

</body>
</html>

<!--
Man, I really wish to vanish!
-->

我唯一能想到的就是将整个文件读入内存并在那里进行处理,即使用正则表达式魔法获取结束HTML标记的位置,此后截断以及写回磁盘等过时的东西。

4 个答案:

答案 0 :(得分:1)

sed

sed -n '1,/<\/html>/p' some.html > truncated.html

实施例

% sed -n '1,/<\/html>/p' some.html
<!DOCTYPE html>
<html>
<head>
 <title>Site | Page 1</title>
</head>
<body>

 <!-- Don't delete me! -->

</body>
</html>

其中:

  • -n - 禁止自动打印图案空间
  • 1是第一行
  • 包含“</html>”的行是最后一行
  • p打印这些行

答案 1 :(得分:1)

这可能对您有用:

sed '/<\/html>/q' file

答案 2 :(得分:0)

这应该这样做。做你需要对结果变量做的任何事情。

myFile="whatever_your_filename_is.something"
ProcessedText=$( sed 's:\(.\+</html>\).*:\1:' $myFile )

这样做是:将文件的内容传递给sed,然后查找最大长度结尾的字符串并捕获它。文本的其余部分匹配,但未捕获。然后将该(即完整文本)替换为捕获的文本(即,直到并包括标签的所有内容)。

答案 3 :(得分:0)

awk

awk 'NR==1,/<\/html>/' file