Forums Neueste Beiträge
 

awk: vier \ sind doch ein bisschen viel

17/11/2007 - 02:01 von Hauke Laging | Report spam
Finde ich jedenfalls.

Wenn ich mit awk einen \ löschen will und das mit gsub/sub mache,
dann brauche ich vier \ für einen Match. Und das hàtte ich nun gerne
mal erklàrt.

Laut man page ist \\ ein "literal \". Warum darf ich dann nicht
erwarten, dass \\ (natürlich Shell-seitig in '') reicht?

Wir reden übrigens über:
hl@server:~> awk --version
GNU Awk 3.1.5g

echo fu\\\'bar | awk '{sub("\\\\","");print;}'
fu'bar

Wonach sucht der denn bei "\\"? Oder kann man so was einfach
wegignorieren?

Verwandtes Problem:
hl@server:~> echo fu\\\'bar | awk '{sub("\.","");print;}'
awk: Warnung: Escape-Sequenz '\.' als '.' behandelt.
u\'bar

Was soll der Quatsch? Warum ist \. nicht ein "literal ."?


CU

Hauke
http://www.hauke-laging.de/ideen/
http://www.hauke-laging.de/software/
http://zeitstempel-signatur.hauke-laging.de/
Wie können 59.054.087 Leute nur so dumm sein?
 

Lesen sie die antworten

#1 Dirk Clemens
17/11/2007 - 08:22 | Warnen spam
Hauke Laging wrote:
Finde ich jedenfalls.

Wenn ich mit awk einen \ löschen will und das mit gsub/sub mache,
dann brauche ich vier \ für einen Match. Und das hàtte ich nun gerne
mal erklàrt.

...

Was soll der Quatsch? Warum ist \. nicht ein "literal ."?



Es gibt 2 Auswertungslevel:

1.) awk erlaubt bei Zeichenketten Escape-Sequenzen, um ,besondere'
Zeichen eingeben zu können. Und dieses Zeichen ist nunmal '\':

# echo | awk '{printf("\101")}'
A

Aus deinen getippten '\\\\' wird daher awk-intern '\\'.

2.)
Auch regex können Escape-Sequenzen mit '\' und benötigen
ein '\\' um das Literal '\' zu erhalten.
Und weil awk den regex aus seinem internen String ,füttert'
sind 4 '\' notwendig.


Ist nun alles klar?
Dirk





Mail an: lemmi (minus) usenet (at) ftb (minus) net (dot) de

Ähnliche fragen