어떻게 교체할 수 있나요? element in many HTML files?</h1>

어떻게 교체할 수 있나요? element in many HTML files?</h1>

내 디렉토리에는 ~/foo많은 HTML 파일이 포함되어 있습니다. 각각에는 원하지 않는 요소가 다릅니다 title. 즉, 각 파일에는 코드가 포함되어 있습니다.

<title>something unwanted</title>

이러한 파일 중 다수에는 span다음과 같은 요소 도 포함되어 있습니다.

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

title모든 HTML 파일을 검사하고 두 번째 유형의 코드 블록이 포함된 모든 파일에 대해 원하지 않는 콘텐츠를 올바른 제목으로 바꾸는 스크립트를 작성하고 싶습니다 .

헤더를 교체한 후 스크립트에서 두 번째 블록의 코드를 제거하고 싶습니다.

예를 들어 스크립트를 실행합니다.

<!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

관련 정보