Tengo un archivo README de rebajas que tiene marcadores html como este:
<!-- CONTRIBUTORS-START -->
<!-- CONTRIBUTORS-END -->
y quiero reemplazar el texto dentro (es posible que ya tenga cosas) con contenido nuevo de un archivo que tiene etiquetas html y caracteres de nueva línea (es una tabla de rebajas con html en celdas).
Estaba intentando reemplazar las nuevas líneas con 0xFF do sed y luego reemplazarlas nuevamente usando este código:
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'
pero esto no funciona, ¿cómo puedo reemplazar el texto dentro de los marcadores con contenido de COLABORADORES?
Funcionaba un poco cuando lo uso tr '\n' '\xFF'
, pero estaba reemplazando la nueva línea por x
.
encontré este artículoSed: Reemplazo de múltiples líneas entre dos patronesy pruébalo usando:
sed -n "/CONTRIBUTORS-START/{p;:a;N;/CONTRIBUTORS-END/!ba;s%.*\n%${CONTRIBUTORS}\n%};p"
(Reemplacé / por % en el comando s) pero obtuve el error:
sed: -e expression #1, char 1630: unterminated `s' command
Respuesta1
Utilicé este truco, simplemente convertí nuevas líneas en un carácter Unicode sonriente "☺"
, mientras reemplazaba sed, ya que las nuevas líneas estaban causando problemas.
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