sed
html(유효한 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