Suchen und Ersetzen in mehreren Dateien

Du hast alle Platzhalter, die tigion liebevoll in spitze Klammern gesetzt hat, ausgetauscht?
 
Ich denke, der Tipp von @oneOeight bzgl. BBEdit ist wirklich zielführend...
 
  • Gefällt mir
Reaktionen: win2mac
Du hast alle Platzhalter, die tigion liebevoll in spitze Klammern gesetzt hat, ausgetauscht?
Ich denke schon. Unter Linux kriege ich es ja auch hin. Oder meinst, ich soll die spitzen Klammern erhalten, a la
Code:
find /Users/<meinname>/<Desktop>/<KSQMKopieZuMExp> -type f -exec sed -i '' 's/<RoentgenPeaks>/<PPPPPPPPPP>/g' {} \;
 
Ich denke, der Tipp von @oneOeight bzgl. BBEdit ist wirklich zielführend...
Ich würde das wirklich gern mit dem Terminal hinbekommen. Denn ständig werde ich bei Problemen auf Terminaloperation verwiesen, sodass ich eingesehen habe, dass ich so oder so mit diesem Tool umgehen lernen muss. Und nur ein Tool für alles zu haben erscheint mir übersichtlich. Dennoch habe ich BBEdit geladen. Ist ja genauso umfangreich wie der Terminal. Aber auch dort: ich bin blutiger Anfänger. Das wird nicht schneller gehen als im Terminal. Ich bin dort genauso überfordert. Ich brauche für den Anfang ein funktionierendes Muster.
 
Ich weiss nicht, ob es als Antwort für dich taugt, aber jeden Programmiereditor (z.B. Brackets) macht Suchen und Ersetzen in Verzeichnisse von Haus aus, Ohne eine Syntax lernen zu müssen.
 
  • Gefällt mir
Reaktionen: dg2rbf
Daher für diese Konkretisierung.
Allerdings liefern alle drei Eingaben je die Fehlermeldung
Code:
sed: RE error: illegal byte sequence

- das {} mus womöglich escaped werden oder noch einfacher: gequoted, also

Code:
"{}"

- spitze Klammern dürfen nicht enthalten sein
- wie lautet dein Suchstring und wie dein Ersatzstring. Eventuell musst du dann auch darin einzelne Zeichen escapen
- in #23 fehlt ein -e vor dem RE (dem Ding mit s/....)
 
Ich denke schon. Unter Linux kriege ich es ja auch hin. Oder meinst, ich soll die spitzen Klammern erhalten, a la
Code:
find /Users/<meinname>/<Desktop>/<KSQMKopieZuMExp> -type f -exec sed -i '' 's/<RoentgenPeaks>/<PPPPPPPPPP>/g' {} \;
nein, auf keinen Fall... das passt so schon:
Code:
find /Users/meinname/Desktop/KSQMKopieZuMExp -type f -exec sed -i '' -e 's/RoentgenPeaks/PPPPPPPPPP/g' {} \;
Ich hab das -e von @lisanet noch eingebaut. Leider hab ich keinen Mac / kein BSD vor der Nase, sonst könnte ich jetzt testen...
 
Zuletzt bearbeitet:
Ich sehe jetzt das Ersetzungen "manchmal" stattfinden.
Wenn ich
Code:
find /Users/meinname/Desktop/KSQMKopieZuMExp -type f -exec sed -i.old -e 's/Strahlungsverteilung/SSSSSSSSSS/g' {} \;
verwende, werden Reintextdateien .old angelegt. Auch wenn in der neuen Datei keine Ersetzungen vorgenommen wurden (Sinn ist wahrscheinlich, dass man trotzdem von dieser Datei weiß, dass sie durchgeschaut wurde nach dem zu ersetzenden Begriff). Die Fehlermeldungen

Code:
sed: RE error: illegal byte sequence

kommen trotzdem. Auch mit "{}".
Mit den Fehlermeldungen könnte ich leben, wenn nun die Ersetzungen noch auf die tex-Dateien angewendet werden würden.

@lisanet was meinst Du mit Suchstring? Also suchen tue ich (jetzt) nach Strahlungsverteilung. Ersetzt werden soll es mit SSSSSSSSS.
Oh ja, das -e. Ich hatte zwischendurch einen anderen Befehl, den mir jemand geraten hat aus dem Ubuntu-Forum probiert:

Code:
find /<Pfad>/<Dateien> -type f -exec sed -i '' 's/<alter Begriff>/<neuer Begriff>/g' {} \;
 
@lisanet was meinst Du mit Suchstring?

ok, ich lasse es sein, sorry. Aber wenn ich dir erst erklären muss, was ich mit Suchstring meine, dann werden wir hier nie fertig. Du findest sicher jemand anderen, der die diesen Begriff erklärt und weiter hilft.

Dem kannst du dann auch gleich sagen, dass ich mal auch sowas hatte mit "illegal byte sequence" bei sed. Ich weiß nur nicht mehr 100%-ig woran es lag, war es die Textkodierung des Terminals oder die der Textdateien, oder sog. formatierter Text, oder war es banal mal wieder nur der Unterschied zwischen der Windows-Art das Zeilenende zu markieren und der *nix-üblichen, sprich LF und CR anstatt nur LF
 
  • Gefällt mir
Reaktionen: Lorzel und dg2rbf
Welches Text Encoding haben die Dateien?
Scheint ja UTF dabei zu sein.
Da hast dann viel Spaß mit dem Suchen/Ersetzen.

Nimm BBEdit.
So schwierig ist es nicht, da den passenden Menüpunkt zu finden.
 
  • Gefällt mir
Reaktionen: dg2rbf und Lorzel
Auf Mac-Rumors wurde mir gesagt, ich soll
Code:
sed -i '' 's/Strahlungsverteilung/SSSSSSSSSS/' /Users/meinname/Desktop/KSQMKopieZuMExp/*.txt
benutzen.
Ich habe nun probiert, diesen Befehl auf tex-Dateien loszulassen. Danach habe ich die Endung durch den Befehl auf tex geändert.
Code:
sed -i '' 's/Strahlungsverteilung/SSSSSSSSSS/' /Users/meinname/Desktop/KSQMKopieZuMExp/*.tex
Gab keine Änderung im Inhalt der Tex-Datei.
Danach habe ich Reintextdateien in das Verzeichnis gelegt. Diese sowohl ohne Endung, als auch mit txt, als auch mit rtf (weil der Mac dies vorschlug) dort abgelegt und obigen Befehl mit rtf probiert. Die mit dem TextEditor angelegte Reintextdatei enthält den Text
"Strahlungsverteilung eines bestimmten Anodenmaterials (siehe AB aus dem Unterricht). Erläutere"
wurde ersetzt durch
"{\rtf1\ansi\ansicpg1252\cocoartf2636
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0

\f0\fs24 \cf0 SSSSSSSSSS eines bestimmten Anodenmaterials (siehe AB aus dem Unterricht). Erl\'e4utere}"

Ich schließe daraus, dass es ein utf8-Problem gegeben haben könnte. Ich hatte diese Text-Passage aus einem mit latin formatiertem tex-File entnommen.
Wenn ich das tex-File zuvor auf utf8 stelle und dann erst den Quelltext aus dem tex-File entnehme, bekomme ich das, was ich will - ohne Fehlermeldung:

"SSSSSSSSSS eines bestimmten Anodenmaterials (siehe AB aus dem Unterricht). Erläutere"
Allerdings wird diese Änderung erst sichtbar, wenn man den zum Betrachten geöffneten Text-Editor schließt und dann wieder öffnet (Alternativ: ein bisschen wartet?)

Damit ich nicht alle Tex-Dateiendungen umbenennen muss, wäre jetzt noch eine Möglichkeit, das Kommando auch auf tex-Dateien anwenden zu können famos.
 
Zuletzt bearbeitet:
Welches Text Encoding haben die Dateien?
Scheint ja UTF dabei zu sein.
Da hast dann viel Spaß mit dem Suchen/Ersetzen.

Nimm BBEdit.
So schwierig ist es nicht, da den passenden Menüpunkt zu finden.
UTF8 war also der richtige Riecher.
 
Ich habe es eben mal nachgestellt und getestet. Der Befehl in meinem Beitrag funktioniert bei mir. Was auch für den Fehler sorgen kann, sind die vom Finder automatisch generierten .DS_Store Dateien. Diese werden von sed als binary Type erkannt und werfen oben genannten Fehler.

Über -name bzw. Kombinationen davon, kann man Dateinamen eingrenzen.

Code:
find /Users/<name>/<path>/<to>/<folder> -type f -name '*.txt' -exec sed -i '' -e 's/<foo>/<bar>/g' {} \;
 
  • Gefällt mir
Reaktionen: ruerueka
Abschließend:
Code:
sed -i '' 's/old/new/' ~/Desktop/aaa/*.tex
tut's, wenn ich nur utf8-codierte (Quell-)Texte im Verzeichnis habe.
Bei mir ist leider die Spezifikation mit latin-codierten (Quell-)Texten aufgetreten (zusätzlich und gepaart mit nicht passenden Kommandos).

Insofern betrachte ich von meiner Seite das Problem als erledigt und bedanke mich für Eure Hilfe.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: dg2rbf
Ich habe es eben mal nachgestellt und getestet. Der Befehl in meinem Beitrag funktioniert bei mir. Was auch für den Fehler sorgen kann, sind die vom Finder automatisch generierten .DS_Store Dateien. Diese werden von sed als binary Type erkannt und werfen oben genannten Fehler.

Über -name bzw. Kombinationen davon, kann man Dateinamen eingrenzen.

Code:
find /Users/<name>/<path>/<to>/<folder> -type f -name '*.txt' -exec sed -i '' -e 's/<foo>/<bar>/g' {} \;
Funktioniert jetzt auch bei mir! Keine Fehlermeldungen mehr. Verzeichnis jedoch inzwischen verschlankt auf nur noch eine (utf8-codierte)-tex-Datei. Also auch hier nochmals danke!
 
  • Gefällt mir
Reaktionen: dg2rbf
Zurück
Oben Unten