Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 13. Nov 2018 6:40

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Womit würdet ihr das machen?
BeitragVerfasst: 10. Jun 2007 12:19 
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 10. Jun 2007 19:00 
Offline
Pro-Linux
Benutzeravatar

Registriert: 15. Aug 1999 16:59
Beiträge: 3236
Wohnort: Bruchsal
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?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 11. Jun 2007 17:51 
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:


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 11. Jun 2007 19:48 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12. Jun 2007 7:50 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 14. Jan 2000 15:37
Beiträge: 699
Wohnort: Jülich
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..."


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12. Jun 2007 10:21 
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12. Jun 2007 18:36 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12. Jun 2007 19:47 
Okay. Dann bin ich informiert. Danke nochmal euch allen, für die Hilfe. Dann werde ich mich mal ran setzen ... *fingerreib*


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 15. Jun 2007 22:42 
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?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 15. Jun 2007 22:53 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 15. Jun 2007 23:06 
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...


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 16. Jun 2007 17:47 
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 16. Jun 2007 20:45 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Oder: 's/^.*String.*$//g;T l1;d;:l1;'

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 13 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de