我怎样才能更换 element in many HTML files?

我怎样才能更换 element in many HTML files?

我的目录~/foo包含许多 HTML 文件。每一种都有不同的不需要的title元素。也就是说,每个文件都包含代码

<title>something unwanted</title>

许多这些文件还包含一些span像这样的元素

<span class="org-document-info-keyword">#+Title:</span> 
<span class="org-document-title">correct title</span>

我想编写一个脚本来扫描每个 HTML 文件,并且对于包含第二类型代码块的每个文件,title用正确的标题替换不需要的内容。

替换标题后,我希望脚本删除第二个块中的代码。

例如,运行脚本

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!-- Created by htmlize-1.47 in css mode. -->
<html>
  <head>
    <title>foo.org</title>
    <style type="text/css">
    <!--
      body {
        color: #839496;
        background-color: #002b36;
      }
      .org-document-info {
        /* org-document-info */
        color: #839496;
      }
      .org-document-info-keyword {
        /* org-document-info-keyword */
        color: #586e75;
      }
      .org-document-title {
        /* org-document-title */
        color: #93a1a1;
        font-size: 130%;
        font-weight: bold;
      }
      .org-level-1 {
        /* org-level-1 */
        color: #cb4b16;
        font-size: 130%;
      }

      a {
        color: inherit;
        background-color: inherit;
        font: inherit;
        text-decoration: inherit;
      }
      a:hover {
        text-decoration: underline;
      }
    -->
    </style>
  </head>
  <body>
    <pre>
<span class="org-document-info-keyword">#+Title:</span> <span class="org-document-title">my desired title
</span><span class="org-document-info-keyword">#+Date:</span> <span class="org-document-info">&lt;2015-08-23 Sun&gt;
</span>
<span class="org-level-1">* hello world</span>

Vivamus id enim.  

</pre>
  </body>
</html>

应该导致

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!-- Created by htmlize-1.47 in css mode. -->
<html>
  <head>
    <title>my desired title</title>
    <style type="text/css">
      <!--
      body {
          color: #839496;
          background-color: #002b36;
      }
      .org-document-info {
          /* org-document-info */
          color: #839496;
      }
      .org-document-info-keyword {
          /* org-document-info-keyword */
          color: #586e75;
      }
      .org-document-title {
          /* org-document-title */
          color: #93a1a1;
          font-size: 130%;
          font-weight: bold;
      }
      .org-level-1 {
          /* org-level-1 */
          color: #cb4b16;
          font-size: 130%;
      }

      a {
          color: inherit;
          background-color: inherit;
          font: inherit;
          text-decoration: inherit;
      }
      a:hover {
          text-decoration: underline;
      }
    -->
    </style>
  </head>
  <body>
    <pre>
      <span class="org-document-info-keyword">#+Date:</span> <span class="org-document-info">&lt;2015-08-23 Sun&gt;
      </span>
      <span class="org-level-1">* hello world</span>

      Vivamus id enim.  

    </pre>
  </body>
</html>

linux中有没有一个工具可以轻松做到这一点?

答案1

您可能最好编写一些脚本。该脚本并不健壮(不检查空字符串,不考虑多行中所需的标题等),但它可能可以帮助您入门。备份在你开始做任何疯狂的事情之前。

#! /bin/bash

FILES="./*.html"
for f in $FILES
do
     grep '.*org-document-title">.*' $f |\
         sed -e 's/.*org-document-title">\([^<]\+\).*/\n\1/g' |\
         tail -n 1 |\
         xargs -I new_title sed -i.bak 's/<title>[^>]\+<\/title>/<title>new_title<\/title>/g' $f
done

这仅将标题替换为新的my desired title.您可以通过进行另一遍并删除不需要的span元素来扩展。

相关内容