【问题标题】:Sed script to delete everything in <head> tag except the <title> and insert scriptSed 脚本删除 <head> 标记中除 <title> 之外的所有内容并插入脚本
【发布时间】:2011-09-21 15:55:21
【问题描述】:

我想在 html 文件中删除除 &lt;title&gt; 之外的 &lt;head&gt; 标记内的所有内容,并在完成后将脚本插入到 &lt;head&gt; 标记中。我不想删除&lt;head&gt; 标签本身。

这可以使用 Sed 吗?

【问题讨论】:

  • head 和 title 的开始标签和结束标签是否总是在一行?还是整个头在一条线上?对于生成的文件,看起来总是一样的,这可能是可能的,但如果您不知道,并且必须处理&lt;head x='...'&gt;-situations,则不推荐。
  • 还有其他方法吗?有还是没有 sed?
  • 就像在渲染 html 文件之前修改它们一样

标签: html sed awk


【解决方案1】:

使用正则表达式解析 HTML 不是一个好的选择。完整讨论请参阅this famous article

【讨论】:

  • 这篇文章并不出名,而是愚蠢的咆哮。为什么不提出论据?他们不认识他们吗?你认识他们吗?然后给它们命名。
  • @user-unknown 一个简单的 SO 搜索会显示您的问题,请参阅 stackoverflow.com/questions/701166/…
  • 嗯,@Frederik,that 是一个有用的评论,但 Bohemian 的评论不是。这是不专业的浪费时间。
【解决方案2】:

我会建议您使用 DOM Parser 进行此类工作,因为您尝试的任何正则表达式在使用 sed 或其任何变体时都会在某些时候中断。由于您在 cmets 中要求提供替代方案,请考虑使用 PHP 中的以下代码:

$content = '
<HTML>
<HEAD>
   <link href="/style.css" rel="stylesheet" type="text/css">
   <title>
   Page Title Goes here
   </title>
   <script>
       var str = "ZZZZZ1233@qq.edu";
   </script>    
</HEAD>
';
$dom = new DOMDocument();
$dom->loadHTML($content);
$head='
<head>
<script>
   // your javascript goes here
   var x="foo";
</script>
';
$headTag = $dom->getElementsByTagName("head")->item(0);
if ($headTag != null) {
   $title = $headTag->getElementsByTagName("title")->item(0);
   if ($title != null)
      $head .= '<title>' . $title->textContent . '</title>
';
}
$head .= '</head>';
var_dump($head);

输出

string(118) "
<head>
<script>
   // your javascript goes here
   var x="foo";
</script>
<title>Page Title Goes here</title>
</head>"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2013-12-03
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2018-10-27
    相关资源
    最近更新 更多