[gelöst] awk/sed/grep ich habe keine Ahnung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
dasebastian
Beiträge: 2123
Registriert: 12.07.2020 11:21:17

[gelöst] awk/sed/grep ich habe keine Ahnung

Beitrag von dasebastian » 26.08.2024 21:12:41

Ich fische hier seit zwei Stunden im Trüben. Folgende Aufgabenstellung:

Code: Alles auswählen

$ echo "return client.focus.first_tag.name" | awesome-client
   string "1"
$ 
Für mein Script möchte ich vom Ergebnis nur die reine Zahl übernehmen und als Variable weiterreichen.

Vor ein paar Tagen hatte ich mit awk ein tolles Erlebnis (Spalten). Hier stehe ich aber an.

Ich bin mir sicher, dass das eine ganz banale Sache ist, trotzdem bitte ich um Aufklärung, ich wünsche mir als Ergebnis einfach 1

Also string und die " " entfernen - um es ganz klar zu machen. :lol:
Zuletzt geändert von dasebastian am 27.08.2024 08:44:36, insgesamt 1-mal geändert.

rhasqx
Beiträge: 3
Registriert: 06.08.2023 08:38:19

Re: awk/sed/grep ich habe keine Ahnung

Beitrag von rhasqx » 26.08.2024 21:31:57

Code: Alles auswählen

echo '     string "1"' | tr "\"" "\n" | grep "^[0-9]+$"

tobo
Beiträge: 2335
Registriert: 10.12.2008 10:51:41

Re: awk/sed/grep ich habe keine Ahnung

Beitrag von tobo » 26.08.2024 21:32:35

grep/sed bezogen auf das Muster "string "..."$", wobei ... einer oder mehrerer Ziffern entspricht:

Code: Alles auswählen

grep -oP '^ *string *"\K\d+(?="$)'
//oder
sed -En 's/^ *string *"([0-9]+)"$/\1/p'
EDIT:
sed-Ausgabe dem grep angepasst, falls das Muster nicht stimmt (=Leer).
Zuletzt geändert von tobo am 26.08.2024 22:36:48, insgesamt 1-mal geändert.

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: awk/sed/grep ich habe keine Ahnung

Beitrag von heisenberg » 26.08.2024 21:34:38

Einfacher

Code: Alles auswählen

... | awesome-client | grep -o "[0-9]\+"
Erklärung: Finde eine Zahl als Ergebnis und gebe nur diese Zahl aus.

Sicherer

Code: Alles auswählen

... | awesome-client | gawk 'match($0,/"([^"]+)"/,m) {print m[1]}' 
Erklärung: Finde etwas, das von "..." umschlossen ist und gebe es aus.

In eine Variable

Code: Alles auswählen

my_var="$( ... | awesome-client | gawk 'match($0,/"([^"]+)"/,m) {print m[1]}' )"
Erklärung: Weise das, was der Befehl in $( ... ) ausgibt, der Variable my_var zu.
Zuletzt geändert von heisenberg am 27.08.2024 00:17:54, insgesamt 1-mal geändert.

tobo
Beiträge: 2335
Registriert: 10.12.2008 10:51:41

Re: awk/sed/grep ich habe keine Ahnung

Beitrag von tobo » 26.08.2024 22:35:37

Einfacher, Sicherer? Die einfache Version geht überhaupt nicht auf den "String" ein und findet einfach irgendwelche Zahlen, und die sichere geht nicht mal mehr auf die Zahlen ein und findet das, was in "" eingeschlossen ist!? Ja, so kann man das auch machen...

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: awk/sed/grep ich habe keine Ahnung

Beitrag von heisenberg » 26.08.2024 23:56:05

tobo hat geschrieben: ↑ zum Beitrag ↑
26.08.2024 22:35:37
Einfacher, Sicherer? Die einfache Version geht überhaupt nicht auf den "String" ein und findet einfach irgendwelche Zahlen, und die sichere geht nicht mal mehr auf die Zahlen ein und findet das, was in "" eingeschlossen ist!? Ja, so kann man das auch machen...
Da hast Du natürlich Recht, aber nur wenn man den Kontext der Frage nicht beachtet. Und der Kontext der Frage ist:
Ich fische hier seit zwei Stunden im Trüben...
Also zwei Stunden, in denen der folgende sehr simple Befehl o. ä. nicht gefunden wurde:

Code: Alles auswählen

grep -o "[0-9]\+"
D. h. hier fragt jemand, der in Sachen Shell-Scripting scheinbar seine ersten Schritte unternimmt. Da ist alles noch fremde Welt, die nach und nach erst erkundet werden will. Ich würde sagen, dass das durchaus ungewöhnlich ist, aber doch auch möglich, dass man auch nach mehreren Jahren Linux sich einfach noch nicht damit beschäftigt hat.

Das soll jetzt nicht herablassend gegenüber dem TE sein, sondern nur der Realität Rechnung tragen, wie sie ist. Und in diesem Kontext ist meine gezielt hochgradig vereinfachende Antwort zu sehen, mit der ich versuche, unter den gegebenen Umständen bzw. dem wahrgenommenen Kenntnislevel trotzdem hilfreich zu sein, d. h. eine Hilfe zu liefern, die für den TE hoffentlich verstehbar ist und ihn weiter bringt. Im Vergleich dazu ist eine sachlich perfekte Lösung hier vollkommen nutzlos.

tobo
Beiträge: 2335
Registriert: 10.12.2008 10:51:41

Re: awk/sed/grep ich habe keine Ahnung

Beitrag von tobo » 27.08.2024 00:29:33

heisenberg hat geschrieben: ↑ zum Beitrag ↑
26.08.2024 23:56:05
Da hast Du natürlich Recht, aber nur wenn man den Kontext der Frage nicht beachtet. Und der Kontext der Frage ist:
Ich fische hier seit zwei Stunden im Trüben...
Sehe ich eigentlich nicht so. Das war ein ganz gezieltes Problem mit der Frage nach einer gezielten Antwort. Wenn jemand RegEx oder deren Anwendung lernen will, dann gibt es bessere Methoden als irgendwelche unzusammenhängenden Fragmente. Da bieten sich Kurse/Bücher an oder zumindest gezielter Code, der nicht funktionierend eingestellt und dann verbessert werden soll.

Z.B.: RegEx-Kurs

dasebastian
Beiträge: 2123
Registriert: 12.07.2020 11:21:17

Re: [gelöst] awk/sed/grep ich habe keine Ahnung

Beitrag von dasebastian » 27.08.2024 08:52:36

Danke an euch alle. Ich habe mich für die einfachste Lösung von heisenberg entschieden, der gesamte Befehl sieht jetzt so aus und funktioniert für meine Bedürfnisse einwandfrei:

Code: Alles auswählen

$ echo "return client.focus.first_tag.name" | awesome-client | grep -o "[0-9]\+"
2
$ 
Ja, der Befehl ist wirklich simpel, ich glaube auch die Einwände dagegen zu verstehen, für meine Zwecke reicht das aber vollkommen.

Hintergrund ist, dass das die Ausgabe des aktuellen Tags/Workspace in Debianawesome ist, auf der ich mich gerade befinde. Da ich mich von meiner Taskleiste verabschiedet habe, kann ich das jetzt in eine notify-send Benachrichtigung einfügen, die mir auf Tastendruck ein paar Infos wie Zeit, Netzwerk, Akkustand... ausgibt.

Und nein, ich wäre trotz der Einfachheit durch reines Lesen der Manpage nicht draufgekommen. Ist mehr so Versuch und Irrtum hier. Danke.

:THX:

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] awk/sed/grep ich habe keine Ahnung

Beitrag von Meillo » 27.08.2024 15:07:20

dasebastian hat geschrieben: ↑ zum Beitrag ↑
27.08.2024 08:52:36
Und nein, ich wäre trotz der Einfachheit durch reines Lesen der Manpage nicht draufgekommen. Ist mehr so Versuch und Irrtum hier. Danke.
Das ist auch nicht verwunderlich. Genauso wenig wie du eine Fremdsprache anhand eines Woerterbuchs lernen kannst, wirst du Regexps anhand der Manpages lernen (obgleich letzteres an sich moeglich waere, ich kenne bloss niemanden, der es auf diese Weise gemacht haette).

grep sieht auf den ersten Blick vielleicht wie ein einfaches Programm aus, was es in *gewisser* Weise auch ist ... aber halt nur wenn man die Grundlagen -- wie eben Regulaere Ausdruecke -- schon beherrscht. Auf dieser Basis ist grep nur ein Befehl wir wc, tr, tail & Co. auch. Wenn man Regexps aber nicht kann, dann ist grep mit Trial 'n Error so gut zu benutzten wie im Ausland mit dem Woerterbuch die Fremdsprache sprechen zu wollen.

sed und awk setzen da noch eine Ebene drauf, da sed nicht nur Regexps voraussetzt, sondern zudem noch ein Verstaendnis seines Arbeitsmodus erfordert (desweiteren ist seine Syntax cryptisch, was aber mehr abschreckend und ungewohnt als eine tatsaechliche Schwierigkeit ist). Awk ist zwar weniger kryptisch und daher scheinbar einfacher, erfordert aber als Basis neben Regexps und dem sed-Arbeitsmodus auch noch eine Kenntnis der C-Syntax. Wenn man diese drei Grundlagen aber hat, dann ist awk zu lernen und zu verstehen eine Sache weniger Stunden.

In diesem Sinne ist es nur normal und zu erwarten, dass du bei den Programmen keinen Durchblick hast, wenn du die Grundlagen davor nicht erlernt hast. ;-) Das kannst du aber natuerlich nachholen. Der Regexp-Kurs wurde ja schon erwaehnt. :THX:
Use ed once in a while!

dasebastian
Beiträge: 2123
Registriert: 12.07.2020 11:21:17

Re: [gelöst] awk/sed/grep ich habe keine Ahnung

Beitrag von dasebastian » 27.08.2024 15:19:18

Meillo hat geschrieben: ↑ zum Beitrag ↑
27.08.2024 15:07:20
Der Regexp-Kurs wurde ja schon erwaehnt. :THX:
Den ich sogar selber im Lesestoff verlinkt habe... :lol: Mal schauen, wie ruhig der Winter hier wird. :THX:

Antworten