Achja, die Bash ist immer wieder lustig …
Problem: Extrahieren eines Datums aus einem File
Das Minimal-File (sample.txt) sieht z.B. so aus:
MYVAR='blah'
Eine einfache Lösung wäre einfach:
grep '^MYVAR=.*$' sample.txt | awk -F"[=']" '{ print $3 }'
Gibt aus: blah
Möchte man aber sicher stellen, dass das Datum von ‚ … ‚ umschlossen wird, wird es lustiger:
grep '^MYVAR='"'"'.*'"'"'$' sample.txt | awk -F"[=']" '{ print $3 }'
So, was ist jetzt da passiert? 🙂
Folgendes … Bash kann Strings konkatenieren, die von single- (‚) oder double-quotes (“ normale Anführungszeichen)umgeben sind … Beispielsweise kann der String „blah“ und ’narf‘ mit echo „blah“’narf‘ ausgegeben werden.
Die Single-Ticks kann man nicht escapen, weshalb man konkateniert …
‚^MYVAR=‘ + „‚“ + ‚.*‘ + „‚“ + ‚$‘ ergibt ‚^MYVAR='“‚“‚.*'“‚“‚$‘ 😀
Sieht echt schrecklich aus 🙂
Jetzt könnte man natürlich noch das Ganze so ändern, dass der String von double-quotes umschlossen wird, dann braucht man nicht konkatenieren:
grep "^MYVAR='.*'$" sample.txt | awk -F"[=']" '{ print $3 }'
ändern …
Da muss man dann aber aufpassen, dass der String nicht als irgendwas interpretiert wird (weshalb ich für sowas ausschließlich single-quotes verwende).