oreus1
Goto Top

Suche leistungsfähiges Tool zum Suchen und ersetzen in Dateiinhalten

Hallo,

Ich betreue regelmäßig ein komplexes System, das auf Windows als JAVA-Applikation läuft:
Sämtliche Konfigurationen werden da in vielen, vielen einzelnen Textdateien, in vielen verschachtelten Ordnern vorgenommen (also 20-30 Config-dateien).
Nun habe ich das Problem, dass ich mehrere solcher Installationen umziehen muss, wobei sich da jedesmal die IP-Adresse, der Hostname und andere Parameter ändern.

Das Auffinden dieser Dateien, wie es früher mal mit der frühen Win-XP-Suche mal möglich war, ist heute nicht mehr so einfach, denn seit diesem Index-Search kann man ja nie wirklich sicher sein, ob man tatsächlich alle Vorkommen des Suchbegriffs "innerhalb" der Dateien des Suchpfades erwischt...

Dafür habe ich mittlerweile den Agent Ransack für mich entdeckt: Für meine Ansprüche sau-schnell, und zuverlässig!

Doch die Königsdisziplin wäre für mich jetzt noch ein Tool, das sowas, wie ein Search&Replace beherrscht, und diese Parameter in den gefundenen Dateien in einem Rutsch ersetzen kann...
Es muss aber, wie eben Agent Ransack auch, zuverlässig alle Vorkommen in den Dateien finden können!

Kennt jemand ein Tool, das sowas kann?

Hintergrund ist der, dass ich in den kommenden Monaten ca. 80 solcher Installationen unter VMware clonen, bzw. exportieren und mit neuen IP-Adressen und Hostnames auf eine neue, vollkommen unabhängige vSphere-Plattform umziehen muss.
Die alte Installation muss aber vorerst mal parallel weiter funktionieren, um eine Fallback-Lösung garantieren zu können.
Hierzu müssen riesige Datenvolumen (mehrere TeraByte pro System) umgezogen werden, und ich habe für jeweils fünf Server immer nur eine Nacht Zeit. Und diese Zeit möchte ich nicht damit vergeuden, indem ich auch noch in unzähligen Dateien einzelne Parameter händisch umschreiben muss... (Was auch recht fehleranfällig wäre...)
Ganz nebenbei muss ich da auch noch die Registry jedes einzelnen Servers bearbeiten. Doch dafür gibt es ja Gottseidank hilfreiche Funktionen...

Ich hoffe, Ihr versteht mein Problem...

Freue mich sehr auf konstruktive Vorschläge!!

Gruß
Oreus1

Content-ID: 368400

Url: https://administrator.de/contentid/368400

Ausgedruckt am: 25.11.2024 um 12:11 Uhr

em-pie
Lösung em-pie 17.03.2018 um 07:54:59 Uhr
Goto Top
Moin,

Also wenn ich dich richtig verstanden habe, willst du massenhaft Inhalte in Textdateien ersetzen!?

Immer mit dem selben Inhalt?
Wenn ja, wäre notepad++ vermutlich das, was du suchst. Du kannst ihm beim Suchen oder Suchen & Ersetzen ein Verzeichnis angeben und er durchsucht alle lesbaren ASCII-Files nach dem zu suchenden Content

Gruß
en-pie
Vision2015
Vision2015 17.03.2018 um 08:31:26 Uhr
Goto Top
Moin..

ja, notepad++ wäre jetzt auch meine erste Idee

Frank
marinux
marinux 17.03.2018 um 09:48:03 Uhr
Goto Top
Powershell?!
drnatur
drnatur 17.03.2018 um 10:04:42 Uhr
Goto Top
Hi,
also ich kann dir auch nur Notepad++ ans Herz legen.
Ich verwende es für meine Homepages, daher bin ich den Umzugsstress gewohnt und Notepad++ hat schon vieles erleichtert, wenns um "Search and Replace" über mehrere Dateien hinweg geht.

Lg
colinardo
Lösung colinardo 17.03.2018 aktualisiert um 13:09:31 Uhr
Goto Top
Zitat von @marinux:
Powershell?!
Ey wer nutzt hier das Zauberwort ohne was zu bieten face-smile.
while($repeat -ne 'n'){  
    cls
    Add-Type -A System.windows.Forms
    $search = Read-Host "Suchstring eingeben"  
    $replace = Read-Host "Ersatzstring eingeben"  
    Do{$useregex = Read-Host "Werden Regular-Expressions im Such- oder Ersatzstring verwendet? [j/n]"}until($useregex -match '^[jn]$')  
    Do{$casesense = Read-Host "Groß- und Kleinschreibung beachten? [j/n]"}until($casesense -match '^[jn]$')  
    write-host "Ordner im Auswahl-Dialog wählen."  
    $folderbrowser = new-object System.Windows.Forms.FolderBrowserDialog
    if ($folderbrowser.ShowDialog() -eq 'OK'){  
        $folder = $folderbrowser.SelectedPath
    }else{
        return
    }
    $folderbrowser.Dispose()

    Do{$recurse = Read-Host "Ordner rekursiv durchsuchen? [j/n]"}until($recurse -match '^[jn]$')  
    $filter = Read-Host "Dateifilter angeben (bsp. *.txt oder )"  

    if ($recurse -eq 'j'){  
        $files = gci "$folder\*" -Include $filter -Recurse -Force  
    }else{
        $files = gci "$folder\*" -Include $filter -Force  
    }

    If($useregex -eq 'j'){  
        $files | ?{(gc $_.FullName) -match $search } | %{
            Write-host "Ersetze Pattern in Datei:  '$($_.FullName)'" -F Green  
            if ($casesense -eq 'j'){  
                (gc $_.Fullname) -creplace $search,$replace | sc $_.Fullname -Force
            }else{
                (gc $_.Fullname) -replace $search,$replace | sc $_.Fullname -Force
            }
        }   
    }else{
        $files | ?{(gc $_.FullName) -like "*$search*" } | %{  
            Write-host "Ersetze Suchwort in Datei:  '$($_.FullName)'" -F Green  
            if ($casesense -eq 'j'){  
                (gc $_.Fullname) -creplace [regex]::escape($search),$replace | sc $_.Fullname -Force
            }else{
                (gc $_.Fullname) -replace [regex]::escape($search),$replace | sc $_.Fullname -Force
            }
        }
    }
    Do{$repeat = Read-Host "Neuen Suchen/Ersetzen Vorgang starten? [j/n]"}until($repeat -match '^[jn]$')  
}
Kann man sich natürlich auch eine GUI drum bauen wers braucht.

Wer UltraEdit sein eigen nennt der kann das auch mit den hauseigenen Funktionen erledigen.

Und wie immer das allseits bekannte sed.

Grüße Uwe
Oreus1
Oreus1 19.03.2018 um 15:08:39 Uhr
Goto Top
Dass der Notepad++ sowas kann, hatte ich nicht auf dem Radar...
Vielen Dank für den Hinweis.