sed: bis Zeichenkette löschen
Beispiel VAR="Irgendwas: bla = blub xyz=123.00 noch eine Menge Text" Wie lösche ich mit sed bis "xyz=" und ab dem 1. Punkt danach? Ergebnis wäre also 123. Den Teil ab ".00" kann man eventuell auch mit cut entfernen. Die Position von "xyz=" variabel und kann nicht durch cut -f bestimmt werden. -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 28.01.2012 16:13, schrieb Аl Воgnеr:
Beispiel VAR="Irgendwas: bla = blub xyz=123.00 noch eine Menge Text"
Wie lösche ich mit sed bis "xyz=" und ab dem 1. Punkt danach? Ergebnis wäre also 123. Den Teil ab ".00" kann man eventuell auch mit cut entfernen. Die Position von "xyz=" variabel und kann nicht durch cut -f bestimmt werden.
Wenn nur Ziffer zwischen "xyz=" und dem Punkt stehen: sed -e 's/.*xyz=\([[:digit:]]*\)\..*/\1/g' Wenn neben Ziffer auch andere Zeichen enthalten sind: sed -e 's/.*xyz=//g' -e 's/\..*//g' Beides sind Spontan-Lösungen und z.B. anhängig vom Inhalt der zu erhaltenden Zeichenkette. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Sa, 28 Jan 2012 16:51:49 CET schrieb Susan Ivanova:
Am 28.01.2012 16:13, schrieb Аl Воgnеr:
Beispiel VAR="Irgendwas: bla = blub xyz=123.00 noch eine Menge Text"
Wie lösche ich mit sed bis "xyz=" und ab dem 1. Punkt danach? Ergebnis wäre also 123. Den Teil ab ".00" kann man eventuell auch mit cut entfernen. Die Position von "xyz=" variabel und kann nicht durch cut -f bestimmt werden.
Wenn nur Ziffer zwischen "xyz=" und dem Punkt stehen:
sed -e 's/.*xyz=\([[:digit:]]*\)\..*/\1/g'
Wenn neben Ziffer auch andere Zeichen enthalten sind:
sed -e 's/.*xyz=//g' -e 's/\..*//g'
Beides sind Spontan-Lösungen und z.B. anhängig vom Inhalt der zu erhaltenden Zeichenkette.
Manchmal denke ich einfach zu kompliziert: echo "$VAR" | sed 's/.*xyz=//' ergibt 123.00 noch eine Menge Text Aber die Zeichenkette kann komplizierte sein als angenommen, es kann zB ein Komma oder ein Dezimalpunkt sein. Ich habe es danach mit cut gelöst. In Ausnahmefällen kommt sogar eine Zeilenschaltung vor. -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, Am Sat, 28 Jan 2012, ?l ??gn?r schrieb:
Am 28.01.2012 16:13, schrieb ?l ??gn?r:
Beispiel VAR="Irgendwas: bla = blub xyz=123.00 noch eine Menge Text"
Wie lösche ich mit sed bis "xyz=" und ab dem 1. Punkt danach? Ergebnis wäre also 123. Den Teil ab ".00" kann man eventuell auch mit cut entfernen. Die Position von "xyz=" variabel und kann nicht durch cut -f bestimmt werden. [..] echo "$VAR" | sed 's/.*xyz=//' ergibt 123.00 noch eine Menge Text
Aber die Zeichenkette kann komplizierte sein als angenommen, es kann zB ein Komma oder ein Dezimalpunkt sein. Ich habe es danach mit cut gelöst. In Ausnahmefällen kommt sogar eine Zeilenschaltung vor.
sed 's/^.*xyz=\([0-9]\+\)\([.,].*\)\?$/\1/' HTH, -dnh -- Jeder hat das Recht auf seine eigene Meinung, aber er hat keinen Anspruch darauf, dass andere sie teilen. -- Manfred Rommel -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am So, 29 Jan 2012 13:02:09 CET schrieb David Haller: Hallo David,
Am Sat, 28 Jan 2012, ?l ??gn?r schrieb:
Am 28.01.2012 16:13, schrieb ?l ??gn?r:
Beispiel VAR="Irgendwas: bla = blub xyz=123.00 noch eine Menge Text"
Wie lösche ich mit sed bis "xyz=" und ab dem 1. Punkt danach? Ergebnis wäre also 123. Den Teil ab ".00" kann man eventuell auch mit cut entfernen. Die Position von "xyz=" variabel und kann nicht durch cut -f bestimmt werden. [..] echo "$VAR" | sed 's/.*xyz=//' ergibt 123.00 noch eine Menge Text
Aber die Zeichenkette kann komplizierte sein als angenommen, es kann zB ein Komma oder ein Dezimalpunkt sein. Ich habe es danach mit cut gelöst. In Ausnahmefällen kommt sogar eine Zeilenschaltung vor.
sed 's/^.*xyz=\([0-9]\+\)\([.,].*\)\?$/\1/'
Warum gibst du ^ an den Anfang? Ist das notwendig? Das verstehe ich: sed 's/^.*xyz= Den Teil danach nur teilweise. Könntest du das bitte kurz erklären? PS: DU hast noch einige PM in der Queue ;-) Ich wollte dir ja einen Download-Link senden. Die Video-Sache ist nicht automatisierbar. Da gibt es immer wieder Überraschungen mit denen man nicht gerechnet hat. Da muss man jedes Log einzeln kontrollieren. -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, Am Sun, 29 Jan 2012, ?l ??gn?r schrieb:
Am So, 29 Jan 2012 13:02:09 CET schrieb David Haller:
sed 's/^.*xyz=\([0-9]\+\)\([.,].*\)\?$/\1/'
Warum gibst du ^ an den Anfang? Ist das notwendig?
Nö.
Das verstehe ich:
sed 's/^.*xyz=
Den Teil danach nur teilweise. Könntest du das bitte kurz erklären?
s/ Ersetze ^.*xyz= vom Anfang bis xyz= \([0-9]\+\) ein oder mehr Ziffern \( [.,] Ein Punkt oder Komma .* dann beliebiges \)\? falls vorhanden $ bis zum Zeilenende / durch \1 den Inhalt der ersten Klammer, also die Ziffern / zwischen xyz= und . , oder Zeilenende
PS: DU hast noch einige PM in der Queue ;-)
Tut mir leid, bin noch nicht dazu gekommen. -dnh -- 188: Piktogramm Comics für Analphabeten. (A. Schelper) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (3)
-
David Haller
-
Susan Ivanova
-
Аl Воgnеr