5

Я должен создать .sh, чтобы заменить определенное ключевое слово в файле, используя содержимое другого файла.

  • template.html содержит уникальную строку " PLACEHOLDER "
  • он должен быть заменен содержимым файла "contents.html"

Sed можно использовать для замены ключевого слова:

value="hello superuser"
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html

Поэтому я попробовал следующее:

value=$(<contents.html)
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html

И получите следующее сообщение об ошибке: неэкранированный символ новой строки внутри шаблона замены

Как справиться с такой ситуацией, пожалуйста?

Спасибо!

2 ответа2

6

С помощью bash вы можете написать:

templ=$(<template.html)
value=$(<contents.html)
echo "${templ//__PLACEHOLDER__/$value}" > page.html
1

Это связано с тем, что "contents.html" содержит несколько строк, и символы новой строки должны быть преобразованы в \n перед передачей в sed .

Например, если "contents.html" содержит

Line 1
Line 2
Line 3

Вам нужно будет изменить его на `Line 1\nLine2\nLine3", прежде чем использовать его в качестве шаблона замены.

Я изменил ваш скрипт как:

value=$(sed ':a;N;$!ba;s/\n/\\n/g' contents.html)
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html

Первая строка читает «contents.html» и заменяет символ новой строки на \n . (Кредит на эту тему)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .