Gibt es eine Möglichkeit, eine rekursive Testsuche auszuführen und mit sed
zu ersetzen , bevor Sie es tatsächlich ausführen? Ich möchte nur die Ergebnisse ausdrucken, bevor ich das Suchen und Ersetzen tatsächlich durchführe. So etwas wie das Wiedergeben der Ergebnisse von,
grep -rl term1 . |xargs sed -i -e 's/term1/term2/'
Akzeptierte Antwort:
Sie könnten sed
ausführen ohne -i
und schrittweise mit less
durch die Ausgabe gehen
grep -rl --null term1 . | xargs -0 sed -e 's/term1/term2/' | less
Führen Sie dann sed
aus mit -i.bak
um Backups zu erstellen, die Sie später vergleichen können
grep -rl --null term1 . | xargs -0 sed -i.bak -e 's/term1/term2/'
diff somefile.bak somefile
# verify changes were correct
Bearbeiten: Verwenden Sie, wie im Kommentar vorgeschlagen, grep --null | xargs -0
. Dies führt dazu, dass Dateinamen mit dem Null-Byte abgeschlossen werden, was es sicher für Dateinamen mit ungewöhnlichen Zeichen wie Zeilenumbruch macht. Ja, n
ist ein gültiges Zeichen in einem Unix-Dateinamen. Die einzigen verbotenen Zeichen sind Schrägstriche /
und das Nullzeichen