Заменить содержимое, содержащее переносы строк, с помощью sed

Заменить содержимое, содержащее переносы строк, с помощью sed

У меня есть файл README с разметкой, в котором есть такие HTML-маркеры:

<!-- CONTRIBUTORS-START -->
<!-- CONTRIBUTORS-END -->

и я хочу заменить текст внутри (он может уже содержать что-то) новым содержимым из файла, который содержит HTML-теги и символы новой строки (это таблица разметки с HTML в ячейках).

Я пытался заменить символы новой строки на 0xFF с помощью sed, а затем заменить их обратно, используя этот код:

CONTRIBUTORS=`./contributors -u jcubic -r jquery.terminal -m | tr '\n' $'\xFF'`
# contributors script get data from github and display markdown table
# or ERROR if rate limit reached

echo "$CONTRIBUTORS" | grep ERROR > /dev/null || cat README.in | tr '\n' $'\xFF' | \
    sed -e "s%\(<!-- CONTRIBUTORS-START -->\).*\(<!-- CONTRIBUTORS-END -->\)%\1\n${CONTRIBUTORS}\2%" #| tr $'\xFF' '\n'

но это не работает, как мне заменить текст внутри маркеров на контент CONTRIBUTORS?

Когда я использовал его, он работал, tr '\n' '\xFF'но заменял символ новой строки на x.

Я нашел эту статьюSed: Многострочная замена между двумя шаблонамии попробуйте использовать:

sed -n "/CONTRIBUTORS-START/{p;:a;N;/CONTRIBUTORS-END/!ba;s%.*\n%${CONTRIBUTORS}\n%};p"

(Я заменил / на % в команде s), но получил ошибку:

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

решение1

Я использовал этот хак, я просто преобразовал новые строки в смайлики Unicode "☺", выполняя замену в sed, поскольку новые строки вызывали проблемы.

CONTRIBUTORS=`./contributors -u jcubic -r jquery.terminal -m $@  | tr '\n' '☺'`

if echo "$CONTRIBUTORS" | grep ERROR > /dev/null; then
    echo "$CONTRIBUTORS" | tr '☺' '\n'
else
    cat README.in | sed -n "/CONTRIBUTORS-START/{p;:a;N;/CONTRIBUTORS-END/!ba;s%.*\n%${CONTRIBUTORS}%};p" | tr '☺' '\n' > README.tmp
    cp README.tmp README.in
    rm README.tmp
fi

Связанный контент