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: 147 Punkte bei 18 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: 185 Punkte bei 22 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: 166 Punkte bei 23 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

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 2 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...

Stellenmarkt

Jetzt auf den Mailinglisten

Re: [EasyLinux-Ubuntu] [gelöst]_Acer_Swift
Willi Zelinka, 15.10.2017 08:04
Hallo Gerhard, Am Samstag, 14. Oktober 2017, 14:28:06 CEST schrieb Gerhard Blaschke: > Hallo Liste, &g...
Re: [EasyLinux-Ubuntu] [gelöst]_Acer_Swift
Steffen Weyh, 14.10.2017 15:34
Hallo Gerhard Das Gerät verfügt über einen M.2-Slot, früher nannte si...
Re: [EasyLinux-Ubuntu] [gelöst]_Acer_Swift
Gerhard Blaschke, 14.10.2017 14:28
Hallo Liste, das Rätsel ist gelöst: damit man manche BIOS-Einstelllungen, zB. Ausschalten von secure boot...
Re: [EasyLinux-Ubuntu] Update von Browser Vivaldi
Maik Messner, 14.10.2017 10:55
Am Montag, den 09.10.2017, 09:01 +0200 schrieb Uwe Herrmuth: Hallo Uwe > Das Ziel erreichst Du auf jeden...
Re: [EasyLinux-Ubuntu] Acer Swift
Heiko Ißleib, 13.10.2017 16:05
Hallo. Angeblich F12? Es gibt ja unterschiedliche Modelle. Gruß Heiko. Am 13.10.2017 08:35 schrieb &quo...