한 파일의 내용을 다른 파일에 삽입하고 패턴 간 바꾸기

한 파일의 내용을 다른 파일에 삽입하고 패턴 간 바꾸기

나는파일 1.html:

<!doctype html>
<html>
<head>
</head>
<body>
    text
    <!-- start-replacing -->
<p>more text1</p>
<p>more text2</p>
    <!-- end-replacing -->
    other text
</body>
</html>

그리고파일 2.txt

<p>some text</p>
<div>some other text</div>

이제 나는 사이의 모든 것을 대체하는 명령을 찾고 있습니다.

<!-- start-replacing -->그리고<!-- end-replacing -->

file2.txt의 내용으로

이것출력.html해야 한다:

<!doctype html>
<html>
<head>
</head>
<body>
    text
    <!-- start-replacing -->
<p>some text</p>
<div>some other text</div>
    <!-- end-replacing -->
    other text
</body>
</html>

답변1

그리고 perl:

perl -0777 -pe '
  BEGIN{$repl = <STDIN>}
  s/<!-- start-replacing -->\K.*?(?=<!-- end-replacing -->)/$repl/sg
' file1.html < file2.txt > output.html

답변2

그리고 GNU sed:

sed -e '/<!-- end-replacing -->/e cat file2.txt' -e '/<!-- start-replacing -->/,//{//!d}' file1.html

이 명령은 끝 주소 범위에서 외부 명령을 e호출하는 데 사용됩니다 . cat file2.txt파일 내용은 일치하는 줄 앞에 삽입됩니다.

그런 다음 주소 범위 사이의 줄을 삭제합니다. //사용된 마지막 정규식을 나타냅니다(쉼표 뒤의 끝 범위와 {}블록 내의 두 주소).

답변3

사용sed

$ sed -Ee '/start-replacing/{{r file2.txt' -e '};n;:a;N;s/.*\n(.*end-replacing[^\n]*\n)/\1/;ba}' file1.html
<!doctype html>
<html>
<head>
</head>
<body>
    text
    <!-- start-replacing -->
<p>some text</p>
<div>some other text</div>
    <!-- end-replacing -->
    other text
</body>
</html>

답변4

W3CHTML-XML-utils HTML 인식 및/또는 XML 인식. 이것hxincl 패키지의 유틸리티는 html-xml-utils포함된 특정 주석을 확장하거나 makefile포함된 파일에 따라 달라지는 규칙 목록을 인쇄합니다.

hxincl -s incfnm='file2.txt' file1.html

약간 수정된 입력이 주어지면 원하는 출력을 생성합니다.

    <!-- begin-include "incfnm" -->

<p>more text1</p>
<p>more text2</p>
    <!-- end-include "incfnm" -->

관련 정보