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

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Womit würdet ihr das machen?

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Möchtegernprogrammierer
Gast





BeitragVerfasst am: 10. Jun 2007 12:19   Titel: Womit würdet ihr das machen?

Hallo ihr,
ich wollte mal Folgendes fragen: Ich will ein Skript bzw. ein Programm schreiben, dass die Dateien in einem Verzeichnis einliest und dort nach einem bestimmten String sucht, ihn heraus löscht und dann die Datei wieder abspeichert.

Nun, C++ ist bei mir ne ganze Weile her und ich kenn mich auch noch nicht so mit diesen ganzen Sprachen wie Perl, Ruby oder Bash aus. Mit welcher Sprache würdet ihr das machen? Womit geht das am einfachsten? Damit ich weiß, wo ich mich einarbeiten muss. Vielleicht hat ja jemand auch schonmal ein ähnliches Skript geschrieben?!

Bitte helft mir.
 

hjb
Pro-Linux


Anmeldungsdatum: 15.08.1999
Beiträge: 3236
Wohnort: Bruchsal

BeitragVerfasst am: 10. Jun 2007 19:00   Titel:

Hi!

Das ist ein Shellskript, nein, nicht einmal das, sondern ein Einzeiler:

Code:
for i in *; do sed -i -e 's/string//g' $i; done


Grüße,
hjb
_________________
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger

Möchtegernprogrammierer
Gast





BeitragVerfasst am: 11. Jun 2007 17:51   Titel:

Ui, also so einfach ist das? Ehm, und Shellskript bedeutet, dass ich das in eine SH-Datei abspeichere? Oder wie gehe ich dann damit weiter vor?

Dank dir für deine Hilfe, Grüße aus Links um die Ecke (Karlsruhe / Hagsfeld) Wink
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 11. Jun 2007 19:48   Titel:

Wie die Datei heißt ist egal. Sie muss nur in der ersten Zeile den Pfad zum Interpreter enthalten

Code:

#!/bin/sh


und ausführbar sein.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 12. Jun 2007 7:50   Titel:

Mit perl wäre das Prinzip dasselbe (per Regulärem Ausdruck den String finden und durch nichts ersetzen), aber man könnte sich noch die for-Schleife sparen und sich Backups der Originaldateien anlegen lassen:
Code:
perl -p -i.bak -e 's/string//g;' *
Einfach am Kommandoprompt eintippen oder in eine Datei hineinschreiben, ein "#!/bin/sh" davorschreiben und die Datei mittels "chmod 755 string-loesch-skript" ausführbar machen.

-p lässt perl über alle Eingabedateien (*) laufen, wobei jede Zeile einzeln eingelesen, bearbeitet und ausgegeben wird. -i schaltet den In-Place-Edit-Modus ein, damit nicht in einer Kopie der Datei gearbeitet wird, sondern der Inhalt der Datei selbst verändert wird. ".bak" steht für die Erweiterung, die das Sicherheitsbackup bekommen soll. Und was dann getan werden soll, bestimmt das Argument zu -e, nämlich ein Suchen/Ersetzen mittels s///.

Grüße,
Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Möchtegernprogrammierer
Gast





BeitragVerfasst am: 12. Jun 2007 10:21   Titel:

Cool. Danke für die Hilfe und die ausführliche Erklärung. Muss ich denn das Skript in dem Ordner zu liegen haben, in dem ich diese Dateien bearbeiten lassen will, oder kann ich dem auch irgendwie einen Pfad angeben? Ein Backup der Dateien brauch ich allerdings nicht.
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 12. Jun 2007 18:36   Titel:

Wo das Skript liegt, ist egal. Du musst beim Aufruf in dem Verzeichnis drinstehen, das du damit bearbeiten willst.

Code:

$ cd MeinVerzeichnis
$ PfadZumSkript/Meinskript


Wenn du das Skript in ein Verzeichnis legst, das im Suchpfad der Shell ist (z.B. /usr/local/bin), kannst du es auch einfach mit "Meinskript" aufrufen.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Möchtegernprogrammierer
Gast





BeitragVerfasst am: 12. Jun 2007 19:47   Titel:

Okay. Dann bin ich informiert. Danke nochmal euch allen, für die Hilfe. Dann werde ich mich mal ran setzen ... *fingerreib*
 

Möchtegernprogrammierer
Gast





BeitragVerfasst am: 15. Jun 2007 22:42   Titel:

Ich bin's nochmal.

Okay, ich hab's bis jetzt ganz gut hingekriegt und verstehe auch, was die Kommandos machen. Der Kofler hat mir dabei auch ganz gut geholfen. Jetzt noch eine Frage: Wie schaffe ich es, dass die gesamte Zeile, in der der String gefunden wurde, gelöscht wird? Ich hab schon etwas mit der d-Option herum gespielt, aber irgendwie ist dann am Ende immer die komplette Datei leer, er löscht also alle Zeilen.

Mein Shell-Skript sieht so aus:

#! /bin/bash
for i in *
do
sed -i -e 's/string//g' $i
done

Wo tue ich das d hin?
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 15. Jun 2007 22:53   Titel:

Nimm als regexp für sed '^.*String.*$' statt "String". Dann matched er die ganze Zeile, wenn darin String vorkommt.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Möchtegernprogrammierer
Gast





BeitragVerfasst am: 15. Jun 2007 23:06   Titel:

Ich will aber, dass die Zeile richtig raus aus der Datei ist. Wenn ich das mache, was du sagst, ist die Zeile selbst zwar leer, aber eben noch da...
 

Möchtegernprogrammierer
Gast





BeitragVerfasst am: 16. Jun 2007 17:47   Titel:

Juchu, ich hab's:

#! /bin/bash
for i in *
do
sed -i -e '/string/d' $i
done

So geht's. Damit wäre ich dann erstmal wunschlos glücklich. Dank euch nochmals.
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 16. Jun 2007 20:45   Titel:

Oder: 's/^.*String.*$//g;T l1;d;:l1;'

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

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

 
Gehen Sie zu:  

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