Ersetzen Sie Inhalte mit Zeilenumbrüchen mithilfe von sed

Ersetzen Sie Inhalte mit Zeilenumbrüchen mithilfe von sed

Ich habe eine Markdown-README-Datei mit HTML-Markierungen wie diesen:

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

und ich möchte den darin enthaltenen Text (er enthält möglicherweise bereits Inhalt) durch neuen Inhalt aus einer Datei ersetzen, die HTML-Tags und Zeilenumbruchzeichen enthält (es ist eine Markdown-Tabelle mit HTML in den Zellen).

Ich habe versucht, Zeilenumbrüche durch 0xFF zu ersetzen, do sed und sie anschließend mit diesem Code wieder zu ersetzen:

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'

aber das funktioniert nicht. Wie kann ich Text in Markierungen durch CONTRIBUTORS-Inhalte ersetzen?

Es hat irgendwie funktioniert, als ich es verwendet habe tr '\n' '\xFF', aber es hat Newline durch ersetzt x.

Ich fand diesen ArtikelSed: Mehrzeiliger Ersatz zwischen zwei Musternund versuchen Sie es mit:

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

(Ich habe / im Befehl durch % ersetzt), aber es trat folgender Fehler auf:

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

Antwort1

Ich habe diesen Hack verwendet und "☺"beim Sed-Ersetzen einfach neue Zeilen in Unicode-Smiley-Zeichen umgewandelt, da Zeilenumbrüche Probleme verursachten.

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

verwandte Informationen