Frage :Wie ersetze ich alle Vorkommen eines Wortes in allen Dateien im angegebenen Ordner?
Stellen Sie sich ein Problemszenario vor, in dem Sie eine Website haben, auf der Sie häufig auf das aktuelle Jahr verweisen. Jedes Jahr müssen Sie das Jahr aktualisieren. Sie können leicht alle Vorkommen in allen Dateien finden, aber es sollte vermieden werden, das Jahr einzeln in jeder Datei manuell zu ändern.
Lösung
Also, was machst du? Eine der verschiedenen Möglichkeiten, alle Vorkommen zu finden und dann den gesuchten Begriff zu ersetzen, ist die Verwendung einer Kombination aus find- und sed-Befehlen.
Sie können dies ganz einfach mit einem einzigen Befehl tun:In diesem Beispiel haben Sie 50 Webseiten im Seitenordner. Dieser Befehl ändert sofort alle Vorkommen von „2017“ in „2018“:
find ~/public_html/my_website/pages -type f -exec sed -i 's/2017/2018/g' {} \;
Um das obige Beispiel etwas allgemeiner zu gestalten, müssen Sie Folgendes tun:
find <path_to_directory> -type f -exec sed -i 's/<search_text>/<replace_text>/g' {} \;
Ersetzen Sie im obigen Befehl
Erklärung
Was Sie hier tun, ist, dass Sie den Befehl find verwenden, um alle Dateien in den aktuellen Verzeichnissen und ihren Unterverzeichnissen abzurufen. Die Option -type f stellt sicher, dass Sie nur Dateien erhalten, keine Verzeichnisse.
Und dann übergeben Sie das Ergebnis mit dem exec-Befehl an den sed-Befehl. Der Befehl sed sucht nach dem Text und ersetzt ihn.
Das {} \; ist Teil des exec-Befehls. Das Leerzeichen zwischen } und \ ist obligatorisch.
Dieser schnelle Linux-Tipp wurde von vorgeschlagen Leserin des Linux-Handbuchs, Jane Hadley. Haben Sie eine bessere Lösung für dieses Problem? Teilen Sie es in den Kommentaren.