html의 스크립트 태그를 해당 내용으로 바꾸는 bash 스크립트

html의 스크립트 태그를 해당 내용으로 바꾸는 bash 스크립트

sedhtml(유효한 xml이 아님)의 스크립트 태그 소스를 일치시키고 전체 일치 항목을 파일 콘텐츠로 바꾸는 것이 가능합니까 ?

예를 들어 html에는 다음이 포함됩니다.

<link rel='stylesheet' href="blah.css">
<script src='foo.js'></script>
<script type="text/javascript" src="bar.js"></script>
<title />

내에서 "foo.js"를 일치시키고 싶을 뿐만 아니라 src='foo.js'해당 파일의 내용도 바꾸고 싶습니다.~의foo.js, 그럼 끝

<link rel='stylesheet' href='blah.css'>
<script>var foo = {};</script>
<script>var bar = [];</script>
<title />  

정규식에서는 다음과 같이 스크립트 태그 src 값을 일치시킬 수 있습니다.

<script\s+(?:[^>]*?\s+)?src=(["'])(.*?)\1

일치 항목은 두 번째 캡처 그룹에 있습니다.

전체 줄을 다시 작성하는 것은 괜찮지만 해당 표현과 일치하도록 sed를 얻는 방법은 그룹이나 역참조를 캡처하는 것을 좋아하지 않는 것 같습니다(적어도 제가 시도한 방식은 다음과 같습니다).그럴 줄 알아). 도움이 되지 않는 답변을 받았습니다

syntax error near unexpected token `)'

또한 파일 이름을 캡처한 다음 해당 내용을 대체 줄로 다시 전달할 수 있습니까?

답변1

나는 사용할 것이다대신에:

awk '
    match($0, "<script src=." jsfile ".></script>") {
        print "<script>"
        while (getline line < jsfile) print line
        print "</script>"
        next
    }
    {print}
' jsfile=foo.js file.html

어느 출력

<link rel='stylesheet' href="blah.css">
<script>
var foo = {};
var bar = [];
</script>
<script type="text/javascript" src="bar.js"></script>
<title />

출력을 원래 HTML 파일로 다시 저장하려면 다음을 수행하십시오.

tmp=$(mktemp)
awk ... > "$tmp" && mv "$tmp" file.html

관련 정보