Search and Replace / suchen und Ersetzen mit Shellscript  this question feed

gefragt von ichweiss am 13. Januar 2008 22:13

Ein Standardproblem, man will in mehreren Dateien bestimmte Passagen / Text austauschen. Diese Dateien sind auch noch in verschiedenen Unterverzeichnissen enthalten.

Typischwerweise sind es html-Dateien in denen man Tags oder Inhalte austauschen will.

Mit sed und find ist das in einem Shellscript kein Problem.

Lösungsvorschläge

Thumb_up
Thumb_down

0%
0%

Antwort:

Folgendes Shellscript macht das gewünschte, es ersetzt eine Zeichenkette durch eine andere:

script will search and replace all regular files for a string

supplied by the user and replace it with another string.

#

Written by Daniel McCarthy

daniel.mccarthy@linuxphile.org

# function usage { echo "" echo "Search/replace script" echo " Written by Daniel McCarthy" echo " xxxxx@xxxx.org" echo " http://linuxphile.org" echo "" echo "Not enough parameters provided." echo "Usage: ./$0 searchstring replacestring" echo "Remember to escape any special characters in the searchstring or the replacestring" echo "" }

check for required parameters

if [ ${#1} -gt 0 ] && [ ${#2} -gt 0 ]; then for f in find -type f; do if grep -q $1 $f; then cp $f $f.bak echo "The string $1 will be replaced with $2 in $f" sed s:$1:$2:g < $f.bak > $f

rm $f.bak fi done else #print usage informamtion usage fi Was ich geändert habe ist die Zeile:

sed s:$1:$2:g < $f.bak > $f

Hier habe ich statt dem / den Doppelpunkt genommen, da man dann als Argumente für das Script auch Pfadnamen eingeben kann ohne sie zu escapen.

Also diesen Code in eine Datei schreiben die man dann searchreplace.sh nennt. Dann noch ein chmod +x searchreplace.sh um das Script ausführbar zu machen.

Aufrufen kann man es dann so:

./search_replace.sh www.xxxx/spam.htm www.xxxxxx.de/xxxx.htm

Jetzt werden alle Dateien geändert die "www.quatsch.de/spam.htm" enthalten. Diese Worte werden durch "xxx.htm" ersetzt. Und zwar in allen Unterpfaden und dem Pfad von dem man das Script aufruft.

vorgeschlagen von ichweiss am 13. Januar 2008 22:15

Thumb_up
Thumb_down

0%
0%

Antwort:

Folgendes Shellscript macht das gewünschte, es ersetzt eine Zeichenkette durch eine andere:

script will search and replace all regular files for a string

supplied by the user and replace it with another string.

#

Written by Daniel McCarthy

daniel.mccarthy@linuxphile.org

# function usage { echo "" echo "Search/replace script" echo " Written by Daniel McCarthy" echo " xxxxx@xxxx.org" echo " http://linuxphile.org" echo "" echo "Not enough parameters provided." echo "Usage: ./$0 searchstring replacestring" echo "Remember to escape any special characters in the searchstring or the replacestring" echo "" }

check for required parameters

if [ ${#1} -gt 0 ] && [ ${#2} -gt 0 ]; then for f in find -type f; do if grep -q $1 $f; then cp $f $f.bak echo "The string $1 will be replaced with $2 in $f" sed s:$1:$2:g < $f.bak > $f

rm $f.bak fi done else #print usage informamtion usage fi Was ich geändert habe ist die Zeile:

sed s:$1:$2:g < $f.bak > $f

Hier habe ich statt dem / den Doppelpunkt genommen, da man dann als Argumente für das Script auch Pfadnamen eingeben kann ohne sie zu escapen.

Also diesen Code in eine Datei schreiben die man dann searchreplace.sh nennt. Dann noch ein chmod +x searchreplace.sh um das Script ausführbar zu machen.

Aufrufen kann man es dann so:

./search_replace.sh www.xxxx/spam.htm www.xxxxxx.de/xxxx.htm

Jetzt werden alle Dateien geändert die "www.quatsch.de/spam.htm" enthalten. Diese Worte werden durch "xxx.htm" ersetzt. Und zwar in allen Unterpfaden und dem Pfad von dem man das Script aufruft.

vorgeschlagen von ichweiss am 13. Januar 2008 22:15

finden

 
 

RSS Feeds

Stichwörter zu diesem Fehler