[gelöst] sed? - regulären Ausdruck suchen und einen Teil davon ausgeben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
smutbert
Moderator
Beiträge: 8318
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

[gelöst] sed? - regulären Ausdruck suchen und einen Teil davon ausgeben

Beitrag von smutbert » 11.02.2021 17:52:10

Hallo,

vom alias-Adventkalender ist bei mir offensichtlich weniger hängengeblieben als mir lieb ist – jedenfalls schaffe ich es nicht mir nur einem Tool aus einer Ausgabe wie alsa_output.pci-0000_00_1f.3.analog-stereo oder alsa_output.pci-0000_00_1f.3.iec958-stereo den Text vom letzten Punkt bis zum nächsten Bindestrich, zB also iec958 auszugeben.

Ich bin einmal so weit gekommen, dass ich mir einen regulären Ausdruck gebastelte habe und hatte noch die Idee in sed mit h das letzte Vorkommen zu speichern und am Ende auszugeben, aber spätestens daran bin ich bereits gescheitert, weil ich es ohne syntax-Fehler nicht geschafft habe noch die Befehle x und p (?) einzubauen.

Code: Alles auswählen

echo alsa_output.pci-0000_00_1f.3.iec958-stereo | sed -ne '/[.][^-.]+[-]/h'
Selbst wenn das funktioniert hätte, hätte ich immer noch das Problem, dass die Ausgabe zB .iec958- statt iec958 lauten würde.

(So nebenbei habe ich auch überlegt ob das nicht auch viel einfacher geht, zB mit awk, aber wenn ich bei awk einen regulären Ausdruck für das Trennzeichen angebe, stehe ich vor dem Problem, dass ich nicht weiß das wievielte Feld das gewünschte ist.)

lg smutbert
Zuletzt geändert von smutbert am 11.02.2021 19:26:42, insgesamt 1-mal geändert.

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

Re: sed? - regulären Ausdruck suchen und einen Teil davon ausgeben

Beitrag von tobo » 11.02.2021 18:00:06

Gebe mal die "ganze" Zeile an:

Code: Alles auswählen

sed 's/.*\.\([^-]*\)-.*/\1/'

Benutzeravatar
smutbert
Moderator
Beiträge: 8318
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: sed? - regulären Ausdruck suchen und einen Teil davon ausgeben

Beitrag von smutbert » 11.02.2021 19:26:32

verflixt, darauf wäre ich nicht so schnell gekommen
Danke :THX:

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: [gelöst] sed? - regulären Ausdruck suchen und einen Teil davon ausgeben

Beitrag von eggy » 11.02.2021 20:01:51

smutbert hat geschrieben: ↑ zum Beitrag ↑
11.02.2021 17:52:10
Text vom letzten Punkt bis zum nächsten Bindestrich
Wenn man die Trennregeln so klar beschreiben kann, gehts mit awk in der Regel ganz einfach:

Erster Teil der Anforderung: "Text vom letzten Punkt an"
Als FS nehmen wir den Punkt. NF enthält die Anzahl der Felder. Dran denken, nummeriert wird von 1 an, da $0 die ganze Eingabezeile ist. Der Trick ist, dass NF ne Ganzzahl ist, und man mit $Ganzzahl die Felder adressieren kann, also gibt $NF das letzte Feld.

Zweiter Teil der Anforderung: "bis zum nächsten Bindestrich":
Mit sub bzw. gsub könnte man in dem Feld dann z.B. alles nach dem ersten Bindestrich durch Nichts ersetzen.
Noch leichter ist es mit split den Text des Felds an den Bindenstrichen aufzutrennen, Split speichert die Teile in ein Array, Details stehen in der Manpage.

Und dann noch das gewünschte Feld des Arrays ausgeben.

Code: Alles auswählen

echo -e "alsa_output.pci-0000_00_1f.3.iec958-stereo\nalsa_output.pci-0000_00_1f.3.analog-stereo" | awk -F "." '{ split($NF, arr, "-");  print arr[1]}'

Benutzeravatar
smutbert
Moderator
Beiträge: 8318
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: [gelöst] sed? - regulären Ausdruck suchen und einen Teil davon ausgeben

Beitrag von smutbert » 12.02.2021 23:18:06

Super, Dankeschön!

Antworten