파일 이름과 일치하는 패턴에 파일을 삽입하려면 어떻게 해야 합니까?

파일 이름과 일치하는 패턴에 파일을 삽입하려면 어떻게 해야 합니까?

3개의 파일이 있다고 가정해 보겠습니다.

index.html

And here is foo:
<!-- include: includes/foo.html -->

This can be done similarly:
<code>
<!-- include: includes/bar.txt -->
</code>

includes/foo.html

FOO CONTENTS
FOO CONTENTS
FOO CONTENTS

includes/bar.txt

BAR CONTENTS
BAR CONTENTS
BAR CONTENTS
BAR CONTENTS
BAR CONTENTS

비슷한 명령을 사용하여 includes를 자동으로 바꾸려면 어떻게 해야 합니까 awk 'some magic code' index.html > compiled.html?

compiled.html

And here is foo:
FOO CONTENTS
FOO CONTENTS

This can be done similarly:
<code>
BAR CONTENTS
BAR CONTENTS
BAR CONTENTS
BAR CONTENTS
BAR CONTENTS
</code>

추가 댓글

  • 해당 파일이 없으면 경고 또는 오류가 발생해야 합니다(선호)( <!-- include: includes/does-not-exist.txt -->).
  • <!-- include: ... -->은 다음 위치에 있으면 안 됩니다.compiled.html
  • 나는 문법 에 include유연하다 . 더 쉬울 수도 있습니다 <include "includes/foo.html">.
  • 나는 "포인터 파일"이지만 하드 코딩된 파일 이름도 없고 포인터가 포함된 파일 행도 없습니다.
  • 명령에서 모든 include를 수동으로 지정하도록 요구해서는 안 됩니다. ( awk 'some magic code' index.html includes/foo.html includes/bar.txt > compiled.html허용되지 않음)
  • 대부분의 파일 이름만 처리하며 너무 많은 도구가 필요하지 않습니다(예를 들어 단지 사용하기 위해 PHP 서버를 설치하지 않는 것이 좋습니다 <? include "includes/bar.txt" ?>).

답변1

그리고 perl:

perl -0777 -pe 'while (s{<!-- include: (.*?) -->}{
  open I, "<", $1; <I>}ge) {}' index.html > compiled.html

( while더 많은 파일을 포함하는 루프를 허용하려면 재귀적으로 만드십시오.)

이것캡처 그룹 (.*?)파일 이름을 검색하여 파일에 포함 F하고 .H$1

오류 처리:

perl -0777 -pe '
  while (
    s{<!-- include: (.*?) -->}{
      if (open I, "<", $1) {
        <I>;
      } else {
        warn "$1: $!\n";
        $ret = 1; 
        "<!-- failed-include: $1 -->"
      }
    }ge
  ) {}
  END {exit $ret}' index.html > compiled.html

관련 정보