Suchen und Ersetzen
Aufgabe
Unter UNIX oder mit Cygwin unter MS-Windows sind in mehreren Dateien eines Verzeichnisses ein identischer Textbereich in einen anderen zu überführen. Lösungsvorschlag
Eine mögliche Lösung zeigt das folgende csh/tcsh-Script:
#!/bin/csh -f # if ( $#argv < 3 ) then echo "" echo "" echo " Exchange in file(s) all pattern1 with the pattern2." echo " Patterns have to be enclosed in single quotes. Special" echo " characters must be protected with a back slash." echo "" echo " Usage: renpatAlternative Lösung[files]" echo "" exit 1 endif # set pat1 = ($argv[1]) set pat2 = ($argv[2]) shift; shift; # foreach file ( $argv ) sed s/$pat1/$pat2/g $file > $file$$ mv $file$$ $file end # # EOF
Eleganter als Einzeiler mit Ruby:
ruby -i.bak -pe 'sub "foo", "bar"' *.[ch]Erklärung: Im aktuellen Verzeichnis wird in allen C-Quell- und Header-Files foo durch bar ersetzt und das ursprüngliche File als Sicherungskopie mit der Endung .bak belassen.
Nach Oben |