Einen Muster in allen Dateien im Verzeichnis durch einen anderen ersetzen



  • Hallo. Wie macht man sowas am einfachsten?
    Ich habe mehrere Quellcode-Dateien in meinem Verzeichnis. Nun habe ich den Namen einer Klasse geändert und möchte natürlich diesen Namen in allen anderen Dateien ändern, damit das Programm kompiliert. Habe geguckt, dass sowas mit sed geht. Aber dafür muss man so ein sed-Skript schreiben, welches zuerst die veränderte Datei in eine Sonderdatei schreibt und dann diese umkopiert. Geht das denn auch irgendwie einfacher? Oder muss man sich wirklich jedes Mal so ein Skript schreiben?

    Gruß
    Ewgenij



  • Wenn du sed mit der Option -n benutzt, dann brauchst du keine solchen Verrenkungen machen, weil das Ergebnis nicht zeilenweise sondern erst am Ende ausgegeben wird.

    for i in *.cpp
    do
        sed -n -e "s/bla/blubb/g" ${i} > ${i}
    done
    

    (mach trotzdem mal vorher ein Backup, ich kann für nichts garantieren ;))



  • GNU sed unterstützt auch einfach "-i":

    -i[SUFFIX], --in-place[=SUFFIX]
    
                  edit files in place (makes backup if extension supplied)
    


  • Hey, danke, Leute. Hab die zweite Variante mit der -i Option benutzt. Geht ja super schnell und bequem! 🙂



  • Geht denn dasselbe wie mit sed -i auch mit gawk? Also, dass er die umgeformte Datei direkt an Stelle der alten Datei schreibt.


Anmelden zum Antworten