PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe zu sed mit Regular Expression



linuxuser
21-06-2005, 20:32
Nehmen wir an, eine Variable enthält:

"text1 text2 text3; text4, text5; text6"

text2 soll gesucht werden und alles danach bis zum ; ersetzt werden.

| sed "s/(text2.*;/textneu;/" ersetzt nun nicht bis zum 1. ; sondern bis zum letzten ;

Wie ersetze ich nur bis zum 1. ;

bash_azubi
21-06-2005, 20:47
Der Ausdruck .*; ist 'gierig', d.h. er verschlingt so viel er kann.
Folgendes geht in deinem Fall:

echo "text1 text2 text3; text4; text5; text6" | sed -e "s#\(text2\).*;\(.*;\)\(.*;\)#\1 neu;\2\3#"

linuxuser
21-06-2005, 21:53
Danke, aber ich habe das mit der Bash probiert und es klappt nicht.

Zur Vereinfach mache ich mal ein konkretes Beispiel:

var="Changes: DateTimeOriginal (Shooting Date/Time) to 1992:12:01 00:00:00; Cr; BlaBla"

Das Problem nun ist, dass "1992:12:01 00:00:00" variabel ist, also suche ich nach "Shooting Date/Time) to " und will dann alles folgende bis zum 1. ; ersetzen. Eventuell habe ich ein Quoting-Problem. Date\/Time habe ich verwendet.

Ergebnis sollte zB sein "Changes: DateTimeOriginal (Shooting Date/Time) to 1999:09:01 00:01:00; Cr; BlaBla", wobei das neue Datum von einer Bash-Variablen übergeben wird, aber das sollte kein Problem sein.

Bist du bitte so nett und schreibst die Syntax für das Beispiel hin.

peschmae
21-06-2005, 22:14
Eventuell sowas:


echo $var | sed "s#[0-9]\{4\}:[0-9]\{2\}:[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}#neuesdatum#"


Aber 1:1 so nur wenn die Zeiten immer genau 4 bzw 2 Zahlen nacheinander haben :)

MfG Peschmä

linuxuser
22-06-2005, 12:35
Das wird nicht 100% klappen, "Shooting Date/Time) to " soll schon in Verbindung zur Zeit gebracht werden.

peschmae
22-06-2005, 13:03
Achso, du hast noch andere Zeilen in der Variablen. Das hatte ich ganz vergessen. Dann tust du halt noch ein /Zeugs/ vordran:

dann halt sowas:


sed "/Shooting Date\/Time/s#[0-9]\{4\}:[0-9]\{2\}:[0-9]\{2\}[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}#neuesdatum#"


MfG Peschmä

linuxuser
22-06-2005, 17:10
Danke! Mit dem komme ich nun klar.