Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
find / sed Frage

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Rossi
Gast





BeitragVerfasst am: 24. Jan 2002 12:00   Titel: find / sed Frage

Moin,

habe folgendes Problem:

Ich bin in einem Verzeichnis mit zig Unterverzeichnissen (und Unterunterverzeichnissen). In einigen (vielen) dieser Unterverzeichnisse ist eine Datei namens "Makefile".
Jetzt möchte ich in allen diesen "Makefile" jede Dateien http durch ftp ersetzen.

"find . -name Makefile -exec 'cat {} | sed s/http/ftp/g' ;" klappt nicht. Neben einem mysteriösen Syntaxfehler (find: cat /Pfad/Makefile | sed s/http/ftp/g: No such file or directory) werden die Dateien mit sed ja auch nur ausgegeben und nicht geändert.

Jemand ne Idee ?

P.S.: Ich gebe zu, es handelt sich um den FreeBSD Ports Tree, aber das problem ist nicht absolut nicht FreeBSD spezifisch, weshalb es auch hier nicht Off Topic ist.
 

Jochen
Gast





BeitragVerfasst am: 24. Jan 2002 14:52   Titel: Re: find / sed Frage

Erst mal zum Syntax-Fehler: Da Du um das find/sed-Konstrukt Hochkommata ('') setzt, wird die ganze Zeichenkette als ein einziges "Argument am Stück" dem -exec als Kommando zur Ausführung gegeben. Und ein Kommando mit Namen "cat {} | sed s/http/ftp/g" gibt es halt wirklich nicht!

Zur in-place-Ersetzung verwende ich mittlerweile am liebsten perl, weil man sich sonst Gedanken um Zugriffsrechte und Eigentümer der neuen Dateien machen muss. Mein Kommando sähe wie folgt aus:
code:

perl -p -i.bak -e 's/http/ftp/g' $(find . -name Makefile)


Statt $(...) darfst Du natürlich auch `...` verwenden, wenn Du keine bash/ksh verwendest. find liefert die Dateinamen als Argumente zu perl, welches in jeder Datei inline (-i.bak) sämtliche Zeilen durchackert und diese auch ausgibt (-p), nachdem es ein substitute-Kommando ausgeführt hat (-e '...'). Zur Sicherheit wird zuerst ein Backup mit der Endung ".bak" angelegt.

OK so?

Skript-Jochen
 

Rossi
Gast





BeitragVerfasst am: 24. Jan 2002 15:06   Titel: Re: find / sed Frage

perl: Argument list too long

Haut noch nicht ganz hin, aber die Richtung stimmt Smile Sieht so aus, als ob er erst alle Makefiles durchackert und dann mit der Substitution beginnen will, was bei 6000+ Makefiles ein Problem sein könnte ?!
 

Jochen
Gast





BeitragVerfasst am: 24. Jan 2002 15:56   Titel: Re: find / sed Frage

Na ja, 6000+ Files sind vielleicht etwas viel auf einmal...

Macht aber nix, xargs (siehe auch http://www.pl-berichte.de/t_shell/xargs.html ) hilft weiter:
code:
find . -name Makefile -print | xargs perl -p -i.bak -e 's/http/ftp/g'

find pipet dann die Namen zu xargs, der daraus Argumentlisten für das perl-Kommando erstellt, die gerade noch passen.

Besser?

Jochen
 

Rossi
Gast





BeitragVerfasst am: 24. Jan 2002 16:13   Titel: Re: find / sed Frage

Jochen: Du wirst hiermit einstimmig zum Pro-Linux Servicemitarbeiter des Monats gekürt !!!

Soweit ich das sehen kann, hat alles hingehauen.
 

Jochen
Gast





BeitragVerfasst am: 24. Jan 2002 16:25   Titel: Re: find / sed Frage

Schön zu hören. Viel Spass noch!

Jochen
 

Jochen
Gast





BeitragVerfasst am: 24. Jan 2002 16:25   Titel: Re: find / sed Frage

Schön zu hören. Viel Spass noch!

Jochen
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy