Bash-Funktion zum Ersetzen aller Textvorkommen in Verzeichnissen und Unterverzeichnissen

Bash-Funktion zum Ersetzen aller Textvorkommen in Verzeichnissen und Unterverzeichnissen

Ich habe (bei Google) diese perfekt funktionierende Zeile gefunden, um alle Vorkommen in allen Dateien in meinem Verzeichnis und den Unterverzeichnissen zu ersetzen:

grep -lr previoustext | xargs sed -i 's/previoustext/newtext/g'

Es funktioniert großartig.

Aber jetzt versuche ich, es in einer Funktion in meiner bash_aliasesDatei wie folgt zu verwenden:

freplace() {
    grep -lr previoustext | xargs sed -i 's/previoustext/newtext/g';
}

Wenn ich jedoch anrufe

freplace previoustext newtext

in meinem Terminal passiert nichts .... Der Text wird nicht ersetzt.

Irgendeine Idee, warum es nicht funktioniert?

Antwort1

Wenn Sie einer Funktion Argumente übergeben möchten, müssen Sie zur Abfrage dieser Argumente Positionsparameter verwenden.

freplace() {
    grep -lr "$1" | xargs sed -i "s/$1/$2/g"
}

Beachten Sie, dass es nicht für Zeichenfolgen funktioniert, die /oder andere für sed spezielle Zeichen enthalten.

verwandte Informationen