Archiv verlassen und diese Seite im Standarddesign anzeigen : sed/awk suchen ersetzen duch dateiinhalt
hallo leute , ich habe ein kleines problem
ich möchte mit sed oder awk einen string(IP adr) in einer datei durch den inhalt einer zweiten datei ersetzen.
beispiel:
sed -e 's/222.222.222.222 /111.111.111.111 /g' dateiname
so wird in der datei die ip adr. 222.222.222.222 durch
111.111.111.111 ersetzt. ich möchte aber die ip adr aus einer
datei beziehen, die zb. ip_neu heisst und in der nur die neue
ip steht.
ich hab es mal mit quoten probiert
sed -e 's/222.222.222.222 /`cat ip_neu` /g' dateiname
aber das klappt mit sed nicht.
kann mir da jemand helfen ????
mightymike99
14-01-2002, 16:03
- Wenn du die Backticks absolut mit einfachen Hochkommata quotierst kann das nix werden. Deswegen Anführungszeichen nehmen
- Zweitens wuerde ich Backticks nicht verwenden da man die zu leicht mal verwechselt nimm' lieber $(...) das ist übersichtlicher und verschachtelbar!
also:
sed -e "s/222.222.222.222 /$(cat ip_neu)/g" dateiname
gruß
fork
Ich hab folgendes versucht
sed --quiet -e "s/alter_key.crt/neuer_key.crt/ig" /etc/httpd/httpd.conf
hat aber keine Veränderung durchgeführt...
hai rebell,
wenn ich dein prob richtig deute, dann hängt es daran, das "sed" files nicht in sich selbst verändert !
du müsstest mit sed folgendes machen:
# sed "s/alter_key.crt/neuer_key.crt/g" /etc/httpd/httpd.conf > /etc/httpd/httpd.conf.neu
# mv /etc/httpd/httpd.conf.neu /etc/httpd/httpd.conf
oder interaktiv am file selbst mit einem kleine
"here-dokument" um einen editor wie vi/ex/ed:
# ex /etc/httpd/httpd.conf << EOF
> :s/alter_key.crt/neuer_key.crt/g
> w
> EOF
und schon ist die datei selbst verändert.
(OBACHT ! syntax-konvetionen beim here-document
sind sehr wichtig !)
gruss
lankin
Ok danke. Und wie ändere ich gefilterte Dateien? Angenommen ich möchte einen Pfad aller HTML-Dateien in einem Verzeichnis ändern.
cat *.htm | sed -e "s/Bilder/neu\/bilder/g" > *.*
Also ich möchte dass sed die Ausgabedatei mit der Eingabedatei überschreibt...
(was so nicht möglich ist)
hi rebell,
du must die dateien nach dem verändern schon
umkopieren. das direkte überschreiben beim
(quasi) gleichzeitigen lesen könnte u.u. zu fatalen
folgen führen. davon kann ich nur abraten.
oder eben mit einem "here-document"
(siehe 2. beispiel in der letzen mail)
arbeiten. damit kannst du die files verändern
ohne dich selbst um tmp-files kümmern
zu müssen.
ciao
lankin
kleine ergänzung,
schon gefiltere dateien in einem separaten
verzeichnis mit gleichen namen könntest du
mit einer kleinen schleife überschreiben,
damit die namen eindeutig bleiben.
find . -name '*htm' |
while read FILE
do
sed -e "s/Bilder/neu\/bilder/g" $FILE > ziel/$FILE
done
ciao
lankin
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.