Supportnet Computer
Planet of Tech

Supportnet / Forum / Linux

Spezielles Problem mit grep...





Frage

Hi, ich will unter Linux nur auf der Textconsole aus vielen Textdateien (.html, .php...) die in einem Verzeichnis und dessen Unterverzeichnisse liegen bestimmte Textpassagen austauschen. Also als Beispiel: temp/pfad1/*.html temp/pfad2/*.asp ... und dort in den Files falls der Text "alibaba ist der Beste" vorkommt, diesen durch "alibaba ist der Allerbeste" ersetzen. Das sollte doch mit grep gehen oder? Gruß und Danke Fabian

Antwort 1 von halfstone

So,

bin schon etwas weiter, also man sollte die entsprechenden Dateien mit grep finden können und dann die Strings mit sed austauschen, das ganze per Pipe verbunden.

Werde es mal versuchen, bin für jede Hilfe dankbar.

Gruß Fabian

Antwort 2 von halfstone

Sooo,

habe ein Shellscript gefunden das genau das macht was ich will, war ein wenig gefriemel bis es mit den Sonderzeichen funktioniert hat aber jetzt geht es:

# 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 "      daniel.mccarthy@linuxphile.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 search_replace.sh nennt. Dann noch ein chmod +x search_replace.sh um das Script ausführbar zu machen.

Aufrufen kann man es dann so:

./search_replace.sh www.quatsch.de/spam.htm www.supportnet.de/toll.htm

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

Gruß Fabian