PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suchen & Ersetzen in Textdateien



Ede
24.05.07, 15:56
Hallo.
Es gibt in kwrite/kate die Option, in einer Textdatei nach einer Zeichenkette zu suchen und diese zu ersetzen. Kann man diese Funktion auf mehrere Dateien gleichzeitig anwenden? Es soll also in mehreren Dateien nach einer Zeichenkette gesucht werden und diese automatisch durch eine andere ersetzt. Gibt es ein Programm, das so was erledigt?

bluesurfer
24.05.07, 16:06
also in kate geht das für einzelne Dateien relativ einfach mit "Bearbeiten" -> "Ersetzen".

Für mehrere Dateien würd ich mir ein Script schreiben, z.B. in bash.

Ede
24.05.07, 16:18
Ich versuche es gleich damit (http://www.budda.ch/info/linux).

zyrusthc
24.05.07, 17:40
Ansonsten versuche es mal mit sed !
man sed

Greeez Oli

Newbie314
27.05.07, 13:36
.. wenn du derartige Aufgaben öfter hast lohnt sich Perl ..... seitdem ich Perl kenne habe ich weder DOS Batch Skripte noch irgendwelche Shell Skripte geschrieben ....

Ede
28.05.07, 13:27
Ich kriege das leider nicht hin, weder mit bash noch mit perl.
Das liegt daran, dass in den von mir angegebenen Zeichenketten "/" Slash enthalten sind. Damit kommt das Programm natürlich nicht klar.
Mit Perl geht das ja so:

find -type f -exec perl -i -p -e 's/pattern/target/g;' {} \;
Ich habe z. B. =http://www.discogs.com/release/9969 als pattern und comment=http://www.discogs.com/release/9969 als target:

find -type f -exec perl -i -p -e 's/=http://www.discogs.com/release/9969/comment=http://www.discogs.com/release/9969/g;' {} \;
Das geht verständlicherweise nicht. Mit der Bash und sed genauso. Wie kann ich so eine komplizierte Zeichenkette mit Sonderzeichen in der Konsole übergeben? Ich habe es schon mit Anführungszeichen versucht ("pattern" und "target"), aber das geht auch nicht.

Luzi P
28.05.07, 13:42
Hallo,

Du kannst versuchen, die / mit \ zu escapen oder ein anderes Trennzeichen verwenden, z .B. so:



find -type f -exec perl -i -p -e 's#=http://www.discogs.com/release/9969#comment=http://www.discogs.com/release/9969#g;' {} \;


Grüße, LP

Ede
28.05.07, 14:03
Klasse! Ich habe es mit # als Trennzeichen probiert. Es funktioniert mit Bash und Perl. Danke, Luzi.

Ich brauche jetzt nur noch Suchen & Löschen. Weiß jemand, wie das geht?
Also nach dem Muster: Suche nach =http://www.discogs.com/release/9969 und lösche die ganze Zeile, in der diese Zeichenkette vorkommt.

tschloss
28.05.07, 14:39
Klasse! Ich habe es mit # als Trennzeichen probiert. Es funktioniert mit Bash und Perl. Danke, Luzi.

Ich brauche jetzt nur noch Suchen & Löschen. Weiß jemand, wie das geht?
Also nach dem Muster: Suche nach =http://www.discogs.com/release/9969 und lösche die ganze Zeile, in der diese Zeichenkette vorkommt.

Suchen&löschen = Ersetzen gegen nichts, oder?

sepp2k
28.05.07, 14:41
Ich brauche jetzt nur noch Suchen & Löschen. Weiß jemand, wie das geht?
Also nach dem Muster: Suche nach =http://www.discogs.com/release/9969 und lösche die ganze Zeile, in der diese Zeichenkette vorkommt.
grep -v SUCHBEGRIFF

tschloss
28.05.07, 14:53
grep -v SUCHBEGRIFF

Das löscht gleich die ganze Zeile - will Ede das?

sepp2k
28.05.07, 14:57
Das löscht gleich die ganze Zeile - will Ede das?
Wenn ich davon ausgehe, dass er das will, was er sagt, dass er will, schon:


Suche nach =http://www.discogs.com/release/9969 und lösche die ganze Zeile, in der diese Zeichenkette vorkommt.

tschloss
28.05.07, 14:59
Wenn ich davon ausgehe, dass er das will, was er sagt, dass er will, schon:
ok, dieses Argument lasse ich ausnahmsweise mal gelten :o

Stand das vorhin schon da?:D
(jaja, ich habe es ja selber zitiert grmmml)

Ede
28.05.07, 15:14
Sehr schön. Das klappt sehr gut mit grep -v.
Danke euch!