[gelöst] search & replace mit sed + wildcard

Hallo,

ich habe eine Frage wie ich mit sed (o.ä.) einen string suchen und ersetzen kann den ich nur zur hälfte kenne. Beispiel:

start1=test
start2=script
start3=prog

Nun will ich die komplette Zeile start2 ersetzen. Da aber nach dem "=" nicht immer script steht, sondern auch manchmal test oder prog benötige ich eine Wildcard.

ich hab auch einiges darüber im internet gefunden. Leider löscht er dann nicht die komplette Zeile sondern z.b. nur das "start2=" und hängt "script" einfach hinten dran. Dann sieht das etwa so aus:

start2=progscript

Die Code-Zeile die ich verwendet habe sieht so aus:

Code:
sed -i 's/start2=/start2=prog/g' file.txt


Wäre sehr dankbar für eine Hilfestellung :)
 
Zuletzt bearbeitet:
Du ersetzt ja nur 'start=' durch 'start2=prog'. Du musst aber 'start=.*' ersetzen. '.' ist ein beliebiges Zeichen bei Regexen und das '*' dahinter besagt, dass es beliebig viele dieser Zeichen sein können.
 
Vielen Danke für den Tip!

mit dem '*' hatte ich es schon versucht. ich hatte lediglich nicht verstanden wie man den '.' anwendet. Danke für die Erläuterung :)
 
Bitte sei so nett und setze zukünftig auch das
erledigt.png
-icon (Thread edit-->erweitert-->"Sie können aus der folgenden Liste ein Symbol für Ihre Nachricht auswählen:
erledigt.png
")

Danke.
 
Eine solche Liste der zu ersetzenden Strings ist aber nur umständlich zu pflegen, wenn z.B. 'prog', 'script' usw. nur als Beispiel bestimmte Programme und Skripte gewählt wurde. Dann doch eher prüfen ob nach dem '=' ein alphanumerisches Zeichen kommt und in diesem Fall die Ersetzung machen.

Ich bin übrigens mit '.*' noch nie "auf die Fresse gefallen", da damit so oder so ein Replace gemacht wird, egal ob da nun nach dem Vorgabestring noch Zeichen kommen oder nicht. Ich nutze diese Kombination recht exzessiv. :D Sicher ist es natürlich nur, wenn der Vorgabestring (in dem Fall hier also 'start2=') fest definiert ist.
 
Eine solche Liste der zu ersetzenden Strings ist aber nur umständlich zu pflegen, wenn z.B. 'prog', 'script' usw. nur als Beispiel bestimmte Programme und Skripte gewählt wurde.

Sicher. Wenn aber die paar Strings feststehen, sollte man auch explizit auf diese Matchen.

Dann doch eher prüfen ob nach dem '=' ein alphanumerisches Zeichen kommt und in diesem Fall die Ersetzung machen.
Das wäre aber falsch. Das würde ja alles alphanumerische nach "start2=" ersetzen. Also z.B. auch "start2=IchMatcheNicht"

Ich bin übrigens mit '.*' noch nie "auf die Fresse gefallen",
Streng genommen bist du das doch, als du deine Antwort in diesem Thread gegeben hast. Das ".*" match eben auch auf "start2=" und das ist nunmal (bezogen auf die Aufgabenstellung) falsch. ;)

Ich nutze diese Kombination recht exzessiv. :D
Dann machst du irgendwas falsch. :D

Micha
 
@mime:
Es steht jedoch in dieser Aussage auch nicht explizit, dass sich ausschließlich "script", "test" und "prog" hinter dem "=" befinden dürfen, somit ist .* doch auch eine sichere Variante - eben eine echte Wildcard, die eben diese Begriffe und auch alle weiteren zulässt.

Gäbe es in den Anforderungen die Beschränkung auf diese 3 Schlüsselworte, dann hättest du Recht - diese Beschränkung kann ich da jedoch nicht heraus lesen. ;)
 
Zurück
Oben