Ich Parsing eine PHP-Datei und Wrapping-Funktion Prototyp-Elemente in HTML. Wenn es jedoch kaufmännische Und-Zeichen gibt, bricht es meinen Code.Sed und Awk Escaping Ampersands (&)
Eingang: function foo (&$var1, &$var2){...}
// als String
gewünschte Ausgabe (in HTML): &$var1, &$var2
// im Grunde genommen nur gibt die Variablen so, dass sie richtig in einem Browser
Gerade jetzt , Ich sende jede Variable in Awaks Sub-Methode , und dann zu sed.
sub(/^&/, "\\\&", param) #param is the variable of interest (e.g. &$var1)
#Intermediate step in case it's relevant. The awk-processed elements
#are sent to ${file}_param.txt. Each set of parameters are delimited by colons.
param=$(cut -d: -f$counter ${file}_param.txt)
#Replace some default text in template file with real stuff.
sed -i "s|@PARAM|$param|1" "$base"_funct_def.txt
Output Ich erhalte: Die Et-Zeichen interpretiert werden. Das gesamte Spiel ist ersetzt.
Problemisolierung: Mit den folgenden Schritten wird stattdessen 'g $ var1' im Browser angezeigt, wie ich es möchte. Allerdings versuche ich stattdessen eine "&" zu bekommen.
sub(/^&/, "g", param)
Meine Versuche: verwendete ich drei Schrägstriche, weil ich dachte, es wäre awk zuerst in Prozess ‚\ &‘, die in sed zugeführt würde interpretieren ‚\ &‘ als wörtliche ‚&‘. Ich habe versucht, irgendwo von 1 bis 6 Backslashes, aber ohne Erfolg.
FRAGE: Wie kann ich die & entkommen?
Handbuch: http://www.staff.science.uu.nl/~oostr102/docs/nawk/nawk_92.html
Einige "meta"/Design Fragen über das, was ich versuche, (nicht erforderlich für Frage !!) zu tun
Ich habe Haufen PHP-Dateien, für die ich ein bisschen Dokumentation erstellen möchte (strukturiert wie Javadocs). Ich gehe durch und analysiere es mit Hilfe von REGEX und Shell-Skripten, so dass ich den Funktionsnamen, die Parameter und die zurückgegebenen Elemente auflisten kann. Bis jetzt hat REGEX ziemlich gut funktioniert, denke ich, aber ich habe viel darüber gelesen, dass REGEX nicht dafür verwendet werden sollte. Ich würde gerne irgendwelche Kommentare zu diesem Thema begrüßen (wie wird die Dokumentation normalerweise erstellt?). Danke Leute!
Was param' tut '$ tatsächlich enthalten? Wenn die Befehle nicht sequenziell ausgeführt werden (z. B. wenn tatsächlich einige andere Codes dazwischen liegen), sollten Sie sie nicht in denselben Codeblock einfügen. Das ist irreführend. – doubleDown
Entschuldigung wegen des irreführenden Teils. Das werde ich mir in Zukunft merken. $ param enthält ein Parameterelement. Zum Beispiel, wenn es eine Funktion gibt: 'function foo (& $ arg1, $ arg2)' $ param soll ''& $ arg1'' sein Gute Nachrichten allerdings: Ich habe eine Lösung gefunden. Bevor ich sed ausführte, vergewisserte ich mich, jedem '&' zu entkommen. Ich habe folgendes direkt nach der ersten Param-Zuweisung hinzugefügt: 'param = $ (echo $ param | sed 's |^& | \\ & | g')' Dies ist im Gegensatz zu dem Versuch, Dinge in awk zu verpacken Teil des Codes. – bobbyjoe93