Archiv verlassen und diese Seite im Standarddesign anzeigen : Bestimmtes Zeichen in Datei ersetzen
Hallo,
ich möchte gerne in einer Textdatei ein bestimmtes Zeichen ersetzen.
Im moment mache ich das mit:
sed -e 's/norman/markus/g' /usr/local/files/namen.txt
Das Ergbnis auf der Konsole ist auch richtig, nur wird es nicht in der Datei gespeichert. Selbst wenn ich die Datei umlenke, erhalte ich eine leere Datei.
Was mache ich den falsch, kann mir das jemand genau erklären? Ich lerne gerade erst mit sed umzugehen :)
oafish
peschmae
12-08-2004, 08:38
Lösungen:
sed -e 's/norman/markus/g' /usr/local/files/namen.txt > namen.txt.tmp
mv namen.txt.tmp /usr/local/files/namen.txt
oder wenn dein Sed das kann auch:
sed -e 's/norman/markus/g' -i /usr/local/files/namen.txt
Das Problem ist dass Sed zeilenweise arbeitet - d.h. auch liest und schreibt. Wenn du sowas machst:
sed -e 's/norman/markus/g' /usr/local/files/namen.txt > /usr/local/files/namen.txt
kann das nicht gut kommen weil Sed zuerst Zeil1 liest, bearbeitet, dann schreibt und dabei die Datei _überschreibt_ - d.h. da wäre maximal eine Zeile drinn - die die Sed las bevor es zu schreiben begann.
Wieso dann jeweils keine drin ist weiss ich nicht - ist eigentlich auch egal, oder?
MfG Peschmä
Ah, wunderbar, bei mir geht der Parameter -i!
Danke für die schnelle Hilfe :)
oafish
Ähm, noch eine kurze Frage, wie funktioniert das mit einer Variablen?
Also anstatt Norman habe ich eine Variable var="Norman"
sed -e 's/$var/markus/g' -i /usr/local/files/namen.txt
oder
sed -e 's/'echo $var'/markus/g' -i /usr/local/files/namen.txt
beides geht nicht.
Gehts überhaupt???
oafish
peschmae
12-08-2004, 11:09
die ' verhindern dass Variablen ersetzt werden durch die Bash.
Entweder verwendest du " statt ' oder du lässt die ' ganz weg:
sed -e "s/$var/markus/g" -i /usr/local/files/namen.txt
sed -e s/$var/markus/g -i /usr/local/files/namen.txt
wobei das zweite dann Probleme macht wenn du irgendwelche Sonderzeichen dabei hast die die Bash interpretiert. Auch gehen würde das da:
sed -e 's/'$var'/markus/g' -i /usr/local/files/namen.txt
Weil da das $var für die Bash nicht innerhalb von den ' ist
MfG Peschmä
Hm funktioniert leider nicht! Allerdings auf einem älteren Rechner geht es prächtig. Denke es liegt an den unterschiedlichen Versionen. Werde erstmal updaten und anschließend weitersehen.
Danke für die Hilfe :)
oafish
peschmae
12-08-2004, 14:47
Was genau funktioniert nicht? Alle drei?
Verwendest du dort eventuell eine andere Shell als die Bash? (Für das Variableneinsetzen ist die Bash zuständig, nicht sed selber)
MfG Peschmä
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.