Wie kann ich diesen Wahnsinn ersetzen?

Wie kann ich diesen Wahnsinn ersetzen?

Wie ersetze ich eine Instanz von

id="ogwb"

mit

id="ogwb" name="ogwb" value="<?php echo htmlspecialchars($_POST['ogwb']); ?>"

verwenden sedoder alternativ?

Antwort1

Ein richtiger Befehl:

sed -E 's/^id="([^"]+)"$/& name="\1" value="<?php echo htmlspecialchars($_POST['"'\1'"']); ?>"/'

Beachten Sie, dass hierdurch von doppelten Anführungszeichen zu einfachen Anführungszeichen gewechselt wird, wenn einfache Anführungszeichen eingebettet werden müssen. In Bash können Sie keine einfachen Anführungszeichen in einfache Anführungszeichen einbetten. Punkt.

Aber das spielt keine Rolle, denn Anführungszeichen sind keine ZeichenfolgeTerminatorenin Bash sind sie nur Trennzeichen zwischen verschiedenen Anführungszeichenstilen. Also:

some-command 'This is in a single quoted string'"'"'This is another quoted string, but is part of the same argument to some-command'
                                                ^^^
                             This single quote is inside of double quotes.

Wenn Sie sich keine Gedanken darüber machen möchten, wie Shell-Anführungszeichen mit interagieren sed, fügen Sie Ihren sedBefehl in eine Datei ein und rufen Sie ihn mit auf sed -f.

Antwort2

echo 'id="ogwb"' | sed 's,id=\(.*\),id=\1 name=\1 value="<?php echo htmlspecialchars($_POST[\1]); ?>",'

verwandte Informationen