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は非常に大きくなる可能性があるため、実際の生活では中間変数を使用するよりも動的解析をお勧めします。)

おすすめ記事