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: renpat    [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
Alternative Lösung
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

Nach Oben