Ich weiß awk
mit sub()
und gsub()
wie Text/string Substitution tun:Kann mir jemand erklären, warum awks sub()/gsub() so funktioniert?
kent$ echo "fffff"|awk '{gsub("f", "b")}1'
bbbbb
oder
kent$ echo "fffff"|awk '{gsub(/f/, "b")}1'
bbbbb
aber heute habe ich einen Tippfehler Fehler gemacht, habe ich die Zeile wie:
kent$ echo "fffff"|awk '{gsub('f', "b")}1'
Aber awk
hat sich nicht darüber beschweren, sondern erzeugte Ausgabe Wie immer, natürlich, unerwartete Ausgabe, brauchte ich irgendwann, um den Fehler zu finden. Der Ausgang awk
mir gab, war:
bfbfbfbfbfb
ein weiteres Beispiel:
kent$ echo "fafafafafXX"|awk '{gsub('fa', "B")}1'
BfBaBfBaBfBaBfBaBfBXBXB
Beispiel mit sub()
ist seltsam zu:
kent$ echo "thanks in advance"|awk '{sub('a', "B")}1'
Bthanks in advance
Könnte mir jemand erklären, wie wurde die seltsame Substitution getan?
kent$ awk --version
GNU Awk 4.0.2
EDIT
danke für die Antwort von Joni. vielleicht dieses Beispiel erklärt es besser, ich habe es nur hier hinzufügen:
kent$ echo "thanks in advance"|awk '{f="k";sub('f', "B")}1'
thanBs in advance
kent$ echo "thanks in advance"|awk '{sub('th ank', "B")}1'
awk: cmd. line:2: {sub(th
awk: cmd. line:2: ^unexpected newline or end of string
+1, klingt vernünftig. – Kent
Ich denke, das könnte ein Trick sein, auch wenn es ein bisschen riskant ist. :) – Kent