Bash-String konkatenieren

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).

 

 

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s