Support » Allgemeine Fragen » Suchen / Ersetzen in DB über mehrere Zeilen

  • Ich komme einfach nicht weiter und werde auch nicht per google fündig. Ich möchte in hunderten von Posts einen Text ändern. Bei einem Wort oder Einzeiler mit den mir bekannten Plugins wie „Beter Search Replace“ kein Problem. Aber der Text, den ich ändern möchte, sieht folgendermaßen aus:

    <hr />
    
    [Irgendein Shortcode]
    
    <hr />

    So steht der Text natürlich auch in der DB, und diesen Text oder besser gesagt, Text-Abschnitt möchte ich durch einen Einzeiler ersetzen, also den Shortcode, die HR-Tags sowie die Leerzeilen. Aber wie automatisieren? Den händisch ändern wird bei der Anzahl der Posts nicht gehen… any ideas?

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 21)
  • Das Plugin Search Regex kann auch nach Regulären Ausdrücken suchen und ersetzen.

    \<hr\s\/\>\n+\[.+\]\n+\<hr\s\/\>

    findet

    <hr />
    
    [******]
    
    <hr />

    wobei der mit *** markierte Inhalt variabel sein kann.

    Thread-Starter FrankEck

    (@frankeck)

    Hallo Bego, danke für den Tip. Habe mir das Search Regex mal installiert, aber auch damit wird nichts gefunden.

    Suche ich nach [sc name=shortcode-in-posts], habe ich Treffer, sobald ich die oder den Ausdruck für das hr<Tag mitsuchen lasse /wie von dir bschrieben, habe ich 0 Treffer…

    Moderator PraetorIM

    (@praetorim)

    Das „Better Search Replace“-Plugin dürfte aus Sicherheitsgründen aus den Eingaben alle Steuerzeichen herausfiltern, was dann auch die Zeilenumbrüche betreffen dürfte.
    Von daher dürfte nur die Arbeit unmittelbar an der (vorher gesicherten!) Datenbank bleiben, etwa über die Suche/Ersetzen-Funktion von phpMyAdmin.

    @praetorim
    Wir sprachen aber von einem Plugin, das Regular Expressions erlaubt.

    Moderator PraetorIM

    (@praetorim)

    Ja, aber auch damit scheint es ja (vermutlich aus dem beschriebenen Grund) nicht zu funktionieren.

    Thread-Starter FrankEck

    (@frankeck)

    Ich habe auch bereits über phpadmin versucht, die Zeichenkette“zu findenn“, aber ebenfalls ohne Erfolg.
    Mein Problem ist anscheinend, dass ich mich kaum mit den regulären Ausdrücken auskenne… und auch der String von Bego führte im phpadmin nicht zum Erfolg…

    Moderator PraetorIM

    (@praetorim)

    Der String von Bego kann in phpMyAdmin nicht zum Erfolg führen, da phpMyAdmin keine RegEx-Ausdrücke versteht.
    Schau doch in den Datenbank-Eintrag eines Beitrages (in der Tabelle wp_posts), wie genau dort der gesuchte Teil abgespeichert ist.

    Der String von Bego kann in phpMyAdmin nicht zum Erfolg führen, da phpMyAdmin keine RegEx-Ausdrücke versteht.

    In PHPmyAdmin nicht. Aber man kann die Datenbank damit exportieren, lokal speichern und eine Kopie dieser exportierten Datenbank in – zum Beispiel Notepad++ – öffnen und per Regex-Suche/Ersetzen bearbeiten. Diese dann wieder importieren.

    Thread-Starter FrankEck

    (@frankeck)

    In post_content steht es genau so drin, wie auch im WP-Editor:

    <hr />
    
    [sc name=text-in-posts]
    
    <hr />

    Also auch mit den Leerzeilen…

    Warum nicht exportieren/importieren? Ganz simple, ich habe das noch nie gemacht. Notepad++ habe ich zwar im Einsatz, aber ich habe Respekt davor, diese Operation durchzuziehen. So ist mir nicht klar, wie der Export läuft, als CSV? Landen alle Posts in einer Datei? Wie läuft der Import, ich muss ja dann die bestehenden Einträge ersetzen usw… daher war ja mein Gedanke, dass ganze per Plugin erledigen zu lassen 🙂

    Ich würde es auch so, wie Angelika machen. 😉

    <hr />
    
    [Irgendein Shortcode]
    
    <hr />

    Nur mal zur Klarstellung: Ist das immer derselbe Shortcode?
    Und von wieviel MB Beiträgen sprechen wir hier?

    Thread-Starter FrankEck

    (@frankeck)

    Ja, ist immer derselbe Shortcode. Es gibt einige Abweichungen, aber die kann ich händisch korrigieren.

    Wir sprechen hier von >400 Beiträgen!

    Dann würde ich persönlich das in einer lokalen WP-Installation mal so testen, wie von Angelika vorgeschlagen. Ich führe mal kurz aus, wie ich ihren Vorschlag verstanden habe (weil du dich offenbar ein wenig davor scheust): Nach vorherigem Backup die Tabelle wp_posts im Format CSV exportieren (Exportieren: Format CSV) und in einem guten Texteditor öffnen. Falls dieser Schwierigkeiten mit der Textmenge haben sollte, wird er sich schon melden. Wenn die Datei sich öffnen lässt, besagte Strings (vorsichtig) ersetzen. Danach wieder in phpMyAdmin als CSV in die *vorher geleerte* (Operationen: Tabelle leeren) Tabelle wp_posts importieren. Scheint mir einen Versuch wert, nachdem es anders ja offenbar noch nicht geklappt hat. Export/Import wird bei der Größe vermutlich etwas dauern…
    Disclaimer: bin kein WP-/MySQL-Profi, daher warte mal noch etwas, ob Korrekturen seitens der Profis kommen.

    @flower33:

    Ich würde an der Stelle erstmal versuchen die exportierte SQL Datei (geht mit der phpmyadmin Oberfläche) mit Suchen und Ersetzen zu bearbeiten. Und dann wieder importieren.

    Der Schritt von CSV und dann noch Excel ist aus meiner Sicht fehleranfällig. Vor allem CSV und SQL – das hat einfach zu viel Fehlerpotential.

    Also: Die PRÄFIX_posts exportieren als SQL Datei -> Suchen und Ersetzen durchführen (mit Sublimetext z.B.) (RegEx beachten) -> dann PRÄFIX_posts leeren und die neue Datei importieren.

    PS: Immer vorher ein Backup machen.

    Wieso als .csv-Datei?

    Backups sind immer gut. Deshalb würde ich als allererstes ein Backup machen – in diesem Fall mit Updraftplus, weil du dann einzelne Archive für die Datenbank, Plugins, Uploads, etc. erhältst. Dann würde ich die Datei kopieren und mit einem gescheiten Programmier-Editor per Regular Expression in der gesamten SQL-Datei nach den Textstellen suchen und sie ersetzen. Eine Unterteilung der einzelnen Tabellen halte ich für nicht notwendig, weil der gesuchte Textstring ohnehin nicht in anderen Tabellen vorkommen wird.

    Im Atom Editor kann man bei der Suche (Cmd/Strg-F) durch Klick auf den Button [.*] angeben, dass man eine Regular Expression verwenden möchte. Ich habe eben folgenden Ausdruck geprüft:

    \<hr \/>\r\n\r\n\[.*\]\r\n\r\n\<hr \/>

    wobei hier die Zeilenschaltung (\r\n) zweimal eingegeben ist.

    Nach Suchen/Ersetzen wird die SQL-Datei gespeichert, als .gz-Datei komprimiert und per Updraftplus wiederhergestellt. (Ist das Ergebnis nicht OK, kann man die zuvor kopierte Sicherung wieder hochladen.)

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 21)
  • Das Thema „Suchen / Ersetzen in DB über mehrere Zeilen“ ist für neue Antworten geschlossen.