PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash/sed: teilweise unbekannten string ersetzen



meinereinerseiner
05-05-2011, 11:12
hallo,

ich möchte in einer Datei einen Sring ersetzen, den ich nur teilweise kenne.
Denke mal das sed da das richtige dafür ist, komme aber mit den Regex dafür nicht zurecht.

In der Zeile:

bla bla 123 xxxxx-23.4.txt bla bla bla
soll "xxxxx-23.4.txt" mit xxxxx-000.txt ersetzt werden.

das wort ist aber weder immer an der 4. stelle, noch kann ich 23.4 umschreiben, da das mal mehr mal weniger zahlen und punkte sind.

dachte ja das ich mit s/xxxxx-*.txt/xxxxx-000.txt/g da weiterkomme, tuts aber nicht.

hat jemand eine idee?


Nachtrag: irgenwie scheint das "-" schuld zu sein.

meinereinerseiner
05-05-2011, 11:47
schön, wenn man sich seine Probleme auch mal selbst lösen kann, aber so gehts:


echo 'bla bla 123 xxxxx-23.4.txt bla bla bla' | sed 's/xxxxx-.*.txt/xxxxx-000.txt/g'

der punkt vorm * ist irgendwie entscheidend, wenn ich auch nicht weis warum.

tom

msi
05-05-2011, 15:23
. = beliebiges zeichen
* = bezieht sich auf das zeichen davor, dieses muss 0-n mal auftreten, es werden so viele davon genommen wie möglich


also

.* = beliebig viele zeichen (auch keins). Das Ding ist gierig und nimmt so viel wie es kriegen kann

meinereinerseiner
05-05-2011, 15:24
ja, macht sinn, versteh sogar ich :)

thx!

tom