Bearbeiten:
Haftungsausschluss: Sie sollten in der Regel bevorzugen, ein ausgereiftes Werkzeug wie xmllint
zu installieren, um eine Aufgabe wie diese zu erledigen. XML/HTML kann eine schrecklich verstümmelte Angelegenheit sein. Es gibt jedoch gültige Situationen, in denen die Verwendung bestehender Werkzeuge vorzuziehen ist, anstatt neue manuell zu installieren, und wo es auch eine sichere Wette ist, dass die Quelle des XMLs gültig (genug) ist. Ich habe dieses Skript für einen dieser Fälle geschrieben, aber sie sind selten, also gehen Sie mit Vorsicht vor.
Ich möchte eine reine Bash-Lösung hinzufügen, da es nicht 'so' schwierig ist, es einfach von Hand zu machen, und manchmal möchten Sie möglicherweise kein zusätzliches Werkzeug installieren, um die Aufgabe zu erledigen.
#!/bin/bash
declare -i currentIndent=0
declare -i nextIncrement=0
while read -r line ; do
currentIndent+=$nextIncrement
nextIncrement=0
if [[ "$line" == "*}"
dirtyTagName="${dirtyStartTag%% *}"
tagName="${dirtyTagName//" && ! "$line" == *"/>" ]]; then
nextIncrement+=1
fi
fi
# Drucken mit Einzug
printf "%*s%s" $(( $currentIndent * 2 )) # Leerzeichen für die Einrückungszahl drucken
echo $line
done <<< "$(cat - | sed 's/>\n< mit Zeilenumbruch
Fügen Sie es in eine Skriptdatei ein und leiten Sie das XML ein. Dies setzt voraus, dass das XML auf einer Zeile steht und nirgendwo zusätzliche Leerzeichen vorhanden sind. Man könnte leicht etwas zusätzliches \s*
zu den Regexen hinzufügen, um das zu beheben.