
Wie ersetze ich eine Instanz von
id="ogwb"
mit
id="ogwb" name="ogwb" value="<?php echo htmlspecialchars($_POST['ogwb']); ?>"
verwenden sed
oder 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 sed
Befehl 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]); ?>",'