sed 교체 명령에 항목을 포함하는 방법은 무엇입니까? [복사]

sed 교체 명령에 항목을 포함하는 방법은 무엇입니까? [복사]

CSS가 포함된 HTML 파일에 따옴표, 작은 따옴표 또는 기타 특수 문자가 포함될 수 있는지 여부에 관계없이 bash 변수에 저장된 모든 유형의 콘텐츠를 다른 콘텐츠의 대체 텍스트 ${CONTENT}로 사용할 수 있도록 처리하고 싶습니다 . sed파일.

CONTENT=$(cat "${HTML_FILE}")
HTML=$(cat "parent_file.html" | tr -d '\n' | sed -E "s/(<body[^>]*>).*(<\/body>)/\1\n${CONTENT}\n\2/")

그러나 이것은 다음과 같은 오류로 인해 오류가 발생합니다.

sed: -e expression #1, char XXX: unterminated `s' command

내가 요구하는 것이 가능한가?

답변1

주석에서 지적했듯이 일반적으로 HTML 구문 분석은 bash에서 수행되어서는 안됩니다. 다음과 같은 도구가 있습니다.xq그들은 올바른 일을 하기 위해 최선을 다하고 있습니다.

그러나 특정 예에 대한 간단한 솔루션이 있습니다. HTML에서 아무것도 따를 필요가 없으므로 </body>sed를 사용하여 원본 콘텐츠를 제거한 다음 닫는 태그와 함께 콘텐츠를 별도로 삽입할 수 있습니다.

CONTENT="$(cat "${HTML_FILE}")"
HEADERS="$(tr -d '\n' <"parent_file.html" | sed -E "s/(<body[^>]*>).*$/\1\n/")"
HTML="${HEADERS}${CONTENT}</body>"

(명확성을 위해 위의 변수에 내용을 유지하고 있습니다. HTML은 매우 커질 수 있으므로 실제 생활에서는 중간 변수를 사용하는 것보다 동적 구문 분석을 권장합니다.)

관련 정보