#1 15. Juli 2010 Guten Tag, Ich habe ein simples Problem bei dem ich z.Z. allerdings fest hänge. Zur verfuegung steht mir nvi,sed und alle anderen Standard Linux Tools. Ich will folgendes haben, ein Kommando welches folgendes Code1 in Code2 umsetzt (ist ein Dateiinhalt welcher nach der aenderung wieder in diese gespeichert werden soll): Code1: Code: ... parameter1 = random parameter2 = random ... parameter1 = random parameter2 = random ... Parameter1/2 sind dabei feste konfigurations- variablen von denen ich die Namen weis und welche sich nicht ändern, "random" ist ein Wert (Text oder zahl) welchen ich nicht kenne. Code2: Code: ... parameter1 = FEST parameter2 = FEST ... parameter1 = FEST parameter2 = FEST ... Die Namen der konfigurations- variablen bleiben gleich, der wert soll in einen Festen wert geändert werden (den ich natürlich angebe). mfg dreamax
#2 15. Juli 2010 AW: [Linux] In Datei Zeile suchen und ersetzen Mit sed ginge das so: Code: pyro@exuma:~ $ cat test.txt parameter1 = random parameter2 = random parameter1 = random parameter2 = random pyro@exuma:~ $ sed -e "s/\(\\w*\) = \\w*/\\1 = FEST/g" test.txt parameter1 = FEST parameter2 = FEST parameter1 = FEST parameter2 = FEST Den regex musst du eventuell anpassen. Auf der bash sieht das ganze auch noch so unschön aus, da man (, ) und \ escapen muss.
#3 15. Juli 2010 AW: [Linux] In Datei Zeile suchen und ersetzen schonmal vielen dank darfuer, da ich damit noch nicht gearbeitet habe, stelle ich mir die frage wo ich parameter1 bzw. parameter2 in den befehl einbinden muss? Ansonsten aendert es mir alle werte ( * = FEST). Vielen Dank!
#4 15. Juli 2010 AW: [Linux] In Datei Zeile suchen und ersetzen Hoi, der reguläre Ausdruck, nachdem sed sucht ist folgender: Code: (\\w*\) = \\w* \w* matcht auf alle Worte, der Ausdruck matcht also auf beliebig viele Worte, die durch ein " = " voneinander getrennt sind. Die () um das erste \w* sind ein sog. Submatch. Im Ersetzungsregex kann man auf den Text innerhalb der Klammern zurückgreifen, in dem man \1 schreibt. Die \ sind nur da, weil man in der Bash eben \, ( und ) escapen muss. Wenn du die parameter-namen die ersetzt werden sollen, selbst festlegen willst, dann kannst du das so machen: Code: sed -e "s/\(parameter1\) = .*/\\1 = FEST/g" test.txt Hier wird auch wieder im Ersetzungsregex mit \1 auf das erste Submatch (hier: parameter1) zurückgegriffen.