Bash - verschachtelte Variablenersetzung, das geht doch eleganter als meine Lösung?

Josef Federl - Dienstag, 18. Juli 2017 20:24:10 - 3 Antworten

#!/bin/bash
#Ziel des Skriptes wird sein die ID zu extrahieren hier nur als Consolentest:
root@~: eingang="RECENT [1] time 1496763560, type 8001, id 134750, value 21.5547"
root@~: teil1=${eingang##*id}
root@~: echo ${teil1%%,*}
134750

ENDE

Soweit so gut-> funktioniert,
Nur bin ich der Meinung dass das noch schlanker geht, nur mir fällt einfach nicht mehr ein wie?
So einfach verschachtelt leider nicht, weil ich da irgendwas vergesse nur was?
hab schon einige Try-Error-Versuche mit Backticks Klammen Anführungszeichen hinter mir.

root@~: echo ${${eingang##*id}%%,*}
bash: ${"${eingang##*id}"%%,*}: Falsche Variablenersetzung.

Danke.

Antworten
verschachtelte Variablenersetzung
pseudomatix (unangemeldet), Freitag, 28. Juli 2017 11:57:38
Ein/Ausklappen

hallo,
das Zerlegen von "RECENT [1] time 1496763560, type 8001, id 134750, value 21.5547"
mittels ${##*} etc, mit zwei Schrtten ist die eleganteste Lösung, die Du richtig erraten hast. Alles andere kann nur schlimmer werden.

In bash gilt noch [[ $eingang =~ pattern ]] und daraus ${BASH_REMATCH[3]} oder so, ist aber nicht portiebar zu /bin/dash oder /bin/rsh. Warung vor versteckten \tabs!

Beispiele:
[[ $eingang =~ id\ ([0-9]+) ]] && echo "${BASH_REMATCH[1]}"

[[ $eingang =~ id[[:blank:]]([0-9]+) ]] && echo "${BASH_REMATCH[1]}" # for \tabs inbetween




Bewertung: 202 Punkte bei 38 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
Die Frage nach dem Wieso?
Josef Federl, Samstag, 22. Juli 2017 18:31:04
Ein/Ausklappen

mit awk könnte es gehen, stimmt, aber Ressourcen schonender dürfte es nicht sein.
Bin immer noch hartnäckig am ausprobieren,
denn ich will ja auch was lernen :)

[root@comp]# echo ${`${eingang##*id}`%%,*}
bash: ${`${eingang##*id}`%%,*}: Falsche Variablenersetzung.
[root@comp]# echo ${'${eingang##*id}'%%,*}
bash: ${'${eingang##*id}'%%,*}: Falsche Variablenersetzung.
[root@comp]# eval echo ${'${eingang##*id}'%%,*}
bash: ${'${eingang##*id}'%%,*}: Falsche Variablenersetzung.
[root@comp]# eval echo ${`${eingang##*id}`%%,*}
bash: ${`${eingang##*id}`%%,*}: Falsche Variablenersetzung.
[root@comp]# eval echo ${${eingang##*id}%%,*}
bash: ${${eingang##*id}%%,*}: Falsche Variablenersetzung.
[root@comp]# eval echo ${"${eingang##*id}"%%,*}
bash: ${"${eingang##*id}"%%,*}: Falsche Variablenersetzung.
[root@comp]# eval echo ${~${eingang##*id}%%,*}
bash: ${~${eingang##*id}%%,*}: Falsche Variablenersetzung.
[root@comp]# eval echo ${(${eingang##*id)}%%,*}
bash: ${(${eingang##*id)}%%,*}: Falsche Variablenersetzung.
[root@comp]# eval echo ${(${eingang##*id})%%,*}
bash: ${(${eingang##*id})%%,*}: Falsche Variablenersetzung.
[root@comp]# eval echo ${((${eingang##*id}))%%,*}
bash: ${((${eingang##*id}))%%,*}: Falsche Variablenersetzung.
[root@comp]# echo $'${eingang##*id}'%%,*
${eingang##*id}%%,*
[root@comp]# echo "$'${eingang##*id}'%%,*"
$' 134750, value 21.5547'%%,*
[root@comp]# echo "${'${eingang##*id}'}%%,*"
bash: ${'${eingang##*id}'}%%,*: Falsche Variablenersetzung.
[root@comp]# echo "$'${eingang##*id}'%%,*"
$' 134750, value 21.5547'%%,*
[root@comp]# eval echo "${'${eingang##*id}'}%%,*"
bash: ${'${eingang##*id}'}%%,*: Falsche Variablenersetzung.
[root@comp]# echo "${'${eingang##*id}'}%%,*"
bash: ${'${eingang##*id}'}%%,*: Falsche Variablenersetzung.
[root@comp]# echo "$'${eingang##*id}'%%,*"
$' 134750, value 21.5547'%%,*
[root@comp]# echo "$`${eingang##*id}`%%,*"
bash: 134750,: Kommando nicht gefunden.
$%%,*
[root@comp]# echo "${`${eingang##*id}`%%,* }"
bash: ${`${eingang##*id}`%%,* }: Falsche Variablenersetzung.
[root@comp]# eval echo "${`${eingang##*id}`%%,* }"
bash: ${`${eingang##*id}`%%,* }: Falsche Variablenersetzung.



Bewertung: 233 Punkte bei 42 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
Re: Bash - verschachtelte Variablenersetzung ... oder Pipe an awk?
Michael Rick, Mittwoch, 19. Juli 2017 15:27:05
Ein/Ausklappen

Reiche doch deinen "eingang" in einer Pipe an awk weiter
echo "$eingang" | awk -F, '{print $3}' | awk '{print $2}'


Bewertung: 214 Punkte bei 40 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Ähnliche Artikel

  • Shell-Tipps
    Erfahrene Linux-Nutzer schwören auf flexible Kommandozeilentools, mit denen sie manche Aufgabe schneller bewältigen als in grafischen Programmen. Wir stellen interessante Anwendungen und Aufrufparameter vor, um auch Einsteiger zu einem Ausflug in die Shell zu ermutigen.
  • Shell-Tipps
    Erfahrene Linux-Nutzer schwören auf flexible Kommandozeilentools, mit denen sich manche Aufgabe schneller bewältigen lässt als in grafischen Programmen. Wir stellen die wichtigsten Anwendungen vor, um auch Einsteiger zu einem Ausflug in die Shell zu ermutigen.
  • Kreislauf
    Schleifen ermöglichen das mehrmalige Abarbeiten von Anweisungen. Dabei kann das begrenzende Ereignis sowohl außerhalb als auch innerhalb der Schleife liegen.
  • Jo´s alternativer Desktop
    Wie Ihr Linux-Desktop aussieht, bestimmen allein Sie. Mit deskTOPia nehmen wir Sie regelmäßig mit auf die Reise ins Land der Window-Manager und Desktop-Umgebungen, stellen Nützliches und Farbenfrohes, Hingucker und hübsches Spielzeug vor. Nachdem sich hier nun verschiedene Window-Manager vorstellten, ist es an der Zeit, diese um ein für viele wichtiges Feature zu ergänzen: Desktop-Icons.
  • Zu Befehl: mv & mmv
    Mit mv ("move") steht Ihnen ein Standardkommando zur Verfügung, das schon seit Ewigkeiten auf Unix-Systemen dabei hilft, Dateien und Verzeichnisse zu verschieben oder umzubenennen. Leider wird es etwas komplizierter, wenn gleich mehrere Dinge in einem Rutsch durch die Gegend geschoben werden sollen. Mit längeren Konstruktionen und for-Schleifen lassen sich diese Aufgaben erledigen, aber warum kompliziert, wenn's auch einfach geht? Das Programm mmv ("multiple move") hilft dabei.

Aktuelle Fragen

Linux Mint als Zweitsystem
Wolfgang Robert Luhn, 13.01.2018 19:28, 1 Antworten
Wer kann mir helfen??? Habe einen neuen Laptop mit vorinstaliertem Windows 10 gekauft. Möchte g...
externe soundkarte Kaufempfehlung
lara grafstr , 13.01.2018 10:20, 3 Antworten
Hallo Ich bin auf Suche nach einer externen soundkarte.. Max 150 Euro Die Wiedergabe is...
Prozessor-Sicherheitslücke Meltdown und Spectre
Wimpy *, 06.01.2018 10:45, 2 Antworten
Ich habe heute ein Sicherheitsupdate "ucode-intel" für openSuse 42.3 erhalten. Ist damit das Prob...
LENOVO ideapad320 Touchpad Linux Mint 18
Peter Deppen, 23.12.2017 16:49, 3 Antworten
Hallo, bin Linux Anfänger und habe das Problem, dass das Touchpad auf dem LENOVO ideapad320 mit L...
PClinuxOS
Günter Beckmann, 20.12.2017 09:51, 1 Antworten
Hi, LUC, hat jemand von Euch Erfahrung mit dem in Heft 12/2017 vorgestelletn PClinuxOS? Ich...

Stellenmarkt

Jetzt auf den Mailinglisten

Re: [EasyLinux-Ubuntu] Dokumentenscanner
Uwe Herrmuth, 16.01.2018 08:34
Hallo reinhold, reinhold schrieb am 16.01.2018 um 07:41: > Hallo will mir einem Dokumentenscanner kaufen...
Re: [EasyLinux-Ubuntu] mp4 nach mp3
Uwe Herrmuth, 16.01.2018 08:26
Hallo Frank, Frank schrieb am 15.01.2018 um 16:16: > kann ich mit audacity von mp4 Dateien nach mp3 über...
[EasyLinux-Ubuntu] Dokumentenscanner
reinhold, 16.01.2018 07:41
Hallo will mir einem Dokumentenscanner kaufen bzw. Canon DR-2050C welcher läuft unter Kubuntu? Danke Gru...
Re: [EasyLinux-Ubuntu] mp4 nach mp3
Rainer, 15.01.2018 17:22
Hallo Frank, Am Mon, 15 Jan 2018 16:16:53 +0100 schrieb Frank : > kann ich mit audacity von mp4 Dateie...
Re: [EasyLinux-Ubuntu] mp4 nach mp3
Heiko Ißleib, 15.01.2018 16:33
Hallo Frank. Am 15.01.2018 16:16 schrieb "Frank" : Hallo spezialisten. kann ich mit audacity vo...