Wie kann ich in der Befehlsshell rekursiv suchen und ersetzen?

0

Wie kann ich mit einer Shell wie bash oder zshell ein rekursives Suchen und Ersetzen durchführen? Mit anderen Worten, ich möchte jedes Vorkommen von "/ path / to / folder" durch "/ other / dir" in allen Dateien in diesem Verzeichnis und seinen Unterverzeichnissen ersetzen.

Dies ist im Wesentlichen die gleiche Frage wie das Original aus diesem Namen, aber ich muss wissen, was passiert, wenn der zu ersetzende Text Schrägstriche enthält, wie in den obigen Beispielen? Kann ich meinen Code einfach an der Stelle zum Suchen / Ersetzen in die Argumente einfügen? Oder muss ich noch was machen ???

All dies wird über ssh auf den Ubuntu-Server erledigt.

Vielen Dank!

Elliot Labs
quelle
1
Ihre Frage ist relly nicht klar , vielleicht wird es helfen , wenn Sie den Code , den Sie verwenden möchten hinzufügen - wenn Sie Probleme mit den Schrägstrichen haben zu entkommen ihnen helfen kann
Konqui
Die Sache ist, dass ich nichts über RegEx weiß. Gibt es einen Ort, um es zu lernen?
Elliot Labs
Ja, es gibt eine Menge Dinge über Regex im Internet, aber achten Sie darauf, dass Regex nicht gleich Regex ist (dies hängt sehr von der Programmiersprache / Skriptsprache ab, die Sie verwenden / die Sie verwenden möchten) - tun Sie es einfach willst du das auf visuelle Weise machen (zeig es einfach auf Terminal / Konsole) oder willst du nicht auch das Verzeichnis in echt ändern (Dateien verschieben / Ordner umbenennen) ???
Konqui
Ich muss ALLES in der Konsole machen. Es ist auf Godaddy-Servern durch SSH
Elliot Labs
OK, aber was möchten Sie tun, um eine Ausgabe in einer Textdatei zu speichern oder eine eigentliche Aufgabe zu erledigen, z. B. das Verschieben / Umbenennen mehrerer Dateien?
Konqui

Antworten:

1

Verwenden findund sed:

find . exec sed -i .bak 's,/path/to/folder,/other/dir,g' \;
  • Sie können auch awkoder perlanstelle von sed- auswählen, was Sie möchten.
  • Sie können Optionen übergeben, findum die Datei einzuschränken, mit der Sie arbeiten & c
sds
quelle
Vielen Dank! Ich weiß, wie man den Teil findet, bei dem es um die Formulierung von sed ging. Ich werde es jetzt testen :)
Elliot Labs
1
Vielen Dank! Ich habe es so benutzt:find html -name ".htaccess" -print0 | xargs -0 sed -i `` -e 's,/dir/with/a/lot/of/subs,/other/dir/with/some/more/subs,g'
Elliot Labs
Es hat wie ein Zauber funktioniert und das hat gerade mehr als 200 Dateibearbeitungen meines Rückens gekostet :)
Elliot Labs