PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Simple sed-Regex-Frage



linuxuser
30-05-2005, 18:20
Ich spiel mich nun schon einge Zeit rum, um die 2. "Spalte" einer Tabelle mit sed zu extrahieren. Mir ist klar, dass man das auch mit cut machen kann, und da schaffe ich es auch.

Die Tabelle sieht etwa so aus:

Irgendein komischer \Text/ mit allen möglichen Zeichen: Wert 1
Ein anderer Text. Der Inhalt ist : Wieder irgendwas

Diese 2 Zeilen befinden sich in einer Variable.

Es geht also um den Teil _nach_ dem Doppelpunkt, wobei Leerzeichen am Anfang und Ende entfernt werden sollen.

Gewünscht ist in einer neuen Variable:
Wert 1
Wieder irgendwas

Danke für Tipps. Bitte konkrete Hinweise. Durch Regex habe ich mich nun schon einige Zeit durchgewühlt.

peschmae
30-05-2005, 18:38
peschmae@thinkpad:~$ echo "Irgendein komischer \Text/ mit allen möglichen Zeichen: Wert 1
Ein anderer Text. Der Inhalt ist : Wieder irgendwas
" | sed "s#.*: ##"
Wert 1
Wieder irgendwas

peschmae@thinkpad:~$


dürfte wohl das sein was du suchst - halt noch mit einem VAR=$() drumherum

MfG Peschmä

linuxuser
30-05-2005, 18:48
Danke, das löscht aber die Leerzeichen am Ende nicht.

Ich hatte davor mit

| sed -e 's/.*: //'

experimentiert und da bleiben auch die Leerzeichen am Ende erhalten. Die Leerzeichen im Ergebnis sind variabel, da unterschiedlich viele Worte vorkommen.

linuxuser
30-05-2005, 19:06
So, ich habe nun doch eine grundsätzlich funktionierende Lösung ertestet:

| sed -e 's/.*: //' | sed 's/^ *//' | sed 's/ *$//'

Welche Vorteile hat nun der Vorschlag von peschmae gegenüber meiner bzw. wie kann man das noch optimieren?

peschmae
30-05-2005, 23:07
Da hatte ich nicht aufgepasst :D

deine Version so ist ok - aber ich würde das alles in einem sed-Aufruf ausführen lassen und nicht in mehreren Prozessen. Dürfte sparsamer sein.

MfG Peschmä

linuxuser
30-05-2005, 23:36
Könntest du bitte die _genaue_ Syntax posten, wie das in 1 Aufruf läuft ?

Ich bin schon froh, dass ich letztlich eine Variante doch noch selber geschafft habe.

peschmae
31-05-2005, 09:07
Sobald das etwas komplizierter wird schreibst du so sachen eh am besten in eine Datei - also



s/.*: //
s/^ *//
s/ *$//


und dann: sed -f datei.sed

oder aber auch sowas:


| sed -e 's/.*: //
s/^ *//
s/ *$//'


Wichtig hier die Anführungszeichen damit die Bash sed nicht etwa die Zeilenumbrüche klaut bzw. du das überhaupt eintippen kannst.

MfG Peschmä