Ich verwende awk
, um Text zu urldecodieren.
Wenn ich die Zeichenfolge in die printf
-Anweisung wie printf "%s", "\x3D"
codiere, gibt sie =
korrekt aus. Das gleiche, wenn ich die ganze Zeichenfolge als Variable habe.
Wenn ich aber nur 3D
habe, wie kann ich \x
anhängen, damit printf
die =
und nicht \x3D
ausdruckt?
Ich verwende busybox awk 1.4.2
und die ash
Shell.
Da du Asche verwendest und Perl nicht verfügbar ist, gehe ich davon aus, dass du gawk
nicht hast.
Wenn ich gawk
oder busybox awk verwende, funktioniert Ihr zweites Beispiel genauso wie das erste (ich bekomme "=" von beiden), wenn ich nicht die Option --posix
verwende (in der Fall bekomme ich "x3D" für beide ).
Wenn ich --non-decimal-data
oder --traditional
mit gawk
verwende, bekomme ich "=".
Welche Version von AWK verwenden Sie ( awk
, nawk
, gawk
, busybox - und Versionsnummer)?
Bearbeiten:
Sie können den String-Wert der Variablen durch Hinzufügen von Null in einen numerischen Wert übernehmen:
%Vor%Dies beruht auf der Erweiterung der Split-Funktion von gnu awk, aber das funktioniert:
%Vor%Zunächst einmal ist mir klar, dass dies eine alte Frage ist, aber keine der Antworten funktionierte für mich (beschränkt auf busybox awk)
Zwei Optionen. Analysieren von stdin:
%Vor%Um einen Befehlszeilenparameter zu nehmen:
%Vor%Sie müssen% 25 zuletzt ausführen, da andernfalls Zeichenfolgen wie% 253D doppelt analysiert werden, was nicht passieren sollte.
Die Inline-Überprüfung für y == 38 ist, weil gsub behandelt & amp; als Sonderzeichen, es sei denn Sie Backslash es.