Befehl suchen / ersetzen

Internetsurfer

New Member
Hallo,

ich suche einen Befehl der mir gewisse Worte in einer Datei (datei.tgz) ändert.

Beispiel:

Ich habe eine .tgz Datei auf dem Server, die mehrfach das Wort test in den gepackten Dateien enthält.

Ich möchte nun, möglichst mit einem Shell Befehl in allen Dateien das Wort "test" z.B. in test123 umbennen.
Ist das überhaupt machbar?
 
Ich kann Dir keinen kompletten Befehl liefern, aber ich würde das nach folgendem Schema machen:

Entpacken, jede einzelne Datei mit sed parsen, den Text ändern, an tar lieferen.

Das Ganze müsste in einer Befehlszeile möglich sein.

--marneus
 
Hallo Internetsurfer,

schau dir hierzu mal replace an (man replace). Erfüllt nicht alles gewünschte ist allerdings einfacher als SED ;)

Lg Rene
 
Was ist denn an sed so schwer?

Code:
sed 's/zusuchendeswort/wortmitdemersetztwerdensoll/' eingabedatei >ausgabedatei
Das ganze kannste ncoh mit regexp versehen wenns komplizierter wird. das Tool ist genial!
 
Hallo Armadillo,

ich habe nie die Aussage getroffen, dass sed schwer ist ;). Allerdings denke ich, dass die Syntax von replace für jemanden der nach einer solchen Lösung fragen muss einfacher ist. Daher auch:

ist allerdings einfacher als
replace OLD NEW -- File

Lesen -> überlesen -> antworten ist hier der falsche Weg :)

Lg Rene
 
schau dir hierzu mal replace an (man replace). Erfüllt nicht alles gewünschte ist allerdings einfacher als SED ;)
Für mich impliziert dieser Satz, dass es für IHN schwer ist mit sed umzugehen. Wenn man ihm aber einfach zeigt wies geht, sollte das kein Problem sein. ;)

Und bitte nciht immer anderen gleich unterstellen, dass man etwas überlesen hat. Es handelt sich meistens um ein Missverständnis. ;)
 
Hallo,

das hört sich ja schon mal alles ganz gut an. Wenn ich also z.B. mit:

Code:
sed 's/zusuchendeswort/wortmitdemersetztwerdensoll/' eingabedatei >ausgabedatei

das Wort ändern kann, gibt es dann auch noch eine Option den eingetragenen Wert zu erhöhen?

Also aus test wird test1, test2, test3...... in der Reihenfolge wie er sie findet?

Nachtrag:

Code:
sed 's/wort500/wort100/'test1>test1

Bringt mir keine Änderungen, sonden lediglich eine leere Datei test1 ???
 
Last edited by a moderator:
Bringt mir keine Änderungen, sonden lediglich eine leere Datei test1 ???
Das liegt daran, dass die Ausgabedatei zunächst mal geleert wird. Da sie auch Eingabedatei ist, ist der anschließend ausgeführte sed-Aufruf ziemlich schnell fertig ;)
Versuch es mal so:
Code:
sed 's/abc/efg/g' datei > datei.$$ && mv datei.$$ datei
Ansonsten kann man das Zahlerhöhungsproblem am ehesten mit "awk" lösen, bzw. in speziellen Fällen auch direkt mit der "bash" -- allerdings kommt das auf den konkreten Fall an.
 
Hallo,

ich denke mal am besten teile ich Euch den Hintergrund meines "Plans" einfach mal mit..das macht sich sicher besser und jeder kann nachvollziehen worum es geht und vielleicht hat ja noch jemand eine bessere Lösung.

Ich habe ein dump file von Confixx erstellt datei.tgz.aa

Ich möchte nun in der Datei den Suffix z.b. web10 +100 erhöhen, sodass aus web10 --> web110 wird.

Warum das Ganze? Ich habe drei ältere Server mit jeweils rund 80 Kunden. Ich muß diese nun auf einen anderen Server schieben. Hierbei gibt es nun das Suffix Problem z.B. 3 x Web1.
Also ist mein Grundgedanke das dump File zu manipulieren. Die dabei entstehenden Zwischenräume werden ja von Confixx ohnehin von selbst gefüllt. Ausserdem verwende ich Confixx DC, was dieses Problem künftig ohnehin löst.

Jetzt teste ich erst mal die Info von LinuxAdmin
 
Ich bin nun schon mal ein Stück weiter gekommen.

ich habe die Datei test1 mit folgendem Inhalt:

web1
web2
web3
web4
web5
web6
web7
web8
web9
web10​

mit der Befehlsfolge:

Code:
sed 's/web*/web1/g' test1 > datei.$$ && mv datei.$$ test1

in man staune:

web11
web12
web13
web14
web15
web16
web17
web18
web19
web110​

wandeln können. Es werden nur die Werte geändert, keine neue Datei angelegt. Der Weg scheint hier richtig.

Allerdings werde ich mit einem naiven:

Code:
sed 's/web*/web1/g' test[COLOR="Red"].tgz[/COLOR] > datei.$$ && mv datei.$$ test[COLOR="Red"].tgz[/COLOR]

etwas enttäuscht. :)
 
Code:
#! /bin/bash
# Hauptscript

mkdir /tmp/replace.$$
tar -C /tmp/replace.$$ -zxf test.tgz
find /tmp/replace.$$ -type f -print0 |xargs -n 1 -0 -r sedscript.sh
tar -C /tmp/replace.$$ -cf test.tgz .
rm -rf /tmp/replace.$$
#
Code:
#! /bin/bash
# sedscript.sh

sed 's/web*/web1/g' $1 $1.$$ && mv $1.$$ $1
#
so oder so ähnlich sollte es gehen (ungetestet)
 
Last edited by a moderator:
Wobei ich denke, dass wahrscheinlich im Tar-File auch noch Pfade angepasst werden müssen. Aber das sollte mit einem weiteren "find -type d -name .... " zu machen sein.
Obacht: ich habe im obigen Code gerade noch was geändert...
 
Ich habe da so ein Problem..

die Zeile:

find /tmp/replace.$$ -type f -print0 |xargs -n 1 -0 -r sedscript.sh

gibt mir ein

xargs: sedscript.sh: Datei oder Verzeichnis nicht gefunden
aus.

Ich habe zwei Dateien angelegt. Als Script geht es erst mal noch nicht, hier bekomme ich Keine Berechtigung.

Wenn ich die Befehle nach der Reihe ausführe, erhalte ich obrige Fehlermeldung.

Ich muß auch dazu sagen, das ich noch in einer frühen Entwicklungsstufe im Bezug auf solche Aktionen bin. Aber jeder erzählt mir, dafür gibt es keine Lösung....das möchte ich widerlegen :-)
 
Back
Top