Shell "Texte/Linien löschen"

Alfmann

Active Member
Hallo,

da ich eben auf die Idee kam, ein wort, text, oder eine Linie via. Shell löschen zu lassen, aber nicht weiß wie und im internet nichts darüber gefunden habe frage ich hier nach wie das bei FreeBSD funktioniert.

Angenommen ich habe eine textdatei auf meinem Apache-Webserver liegen wo mehrere Downloadlinks zu finden sind, und diese via. Shell gelöscht werden sollen (zumindestens ein link).

Funktioniert das etwa so? "echo < 'downloadlink' dateiname ?

bin ganz neu bei Shell, also bitte nicht aus allen Wolken fallen.
 
Funktioniert das etwa so? "echo < 'downloadlink' dateiname ?

sed ist dein Freund, oder grep, je nachdem wie du es anstellst.
Wenn die Links zeilenweise getrennt sind, dann:

grep -v "downloadlink" dateiname > neue_datei

heißt: ließ dateiname ein, und gib jede Zeile aus, die nicht auf downloadlink matcht, die Ausgabe wird in neue_datei geschrieben.

Nach den ganzen Fragen, die du hier im Forum stellst, solltest du dir aber erstmal ein Buch über UNIX-Grundlagen besorgen und das studieren.
 
Danke, ja, wird die beste Methode sein.

Nochmal zu dem Befehl.
Funktioniert das auch ohne, dass die Links oder Texte, - jenachdem einfach nur gelöscht werden und nicht in einer extra Datei gespeichert werden?
 
Danke, ja, wird die beste Methode sein.

Nochmal zu dem Befehl.
Funktioniert das auch ohne, dass die Links oder Texte, - jenachdem einfach nur gelöscht werden und nicht in einer extra Datei gespeichert werden?

Wie gesagt, lies dich erstmal ein. Dann würde dir nämlich das hier einfallen:

grep -v "downloadlink" dateiname > neue_datei && mv neue_datei dateiname

Rob
 
Angenommen ich habe eine textdatei auf meinem Apache-Webserver liegen wo mehrere Downloadlinks zu finden sind, und diese via. Shell gelöscht werden sollen (zumindestens ein link).
Hallo,
ich bin nicht sicher, ob ich verstehe, was Du willst. Du hast eine Datei alt.txt und willst eine neue Datei neu.txt herausschreiben, die identisch ist mit der alten - bis auf alle http://blabla, die alle herausgeschnitten sein sollen.
Allein mit der Shell ist das umständlich, am einfachsten geht es mit dem sed.
Also ungefähr so: »sed 's!http://[^ \n]*!!g' alt.txt >neu.txt«
Schau Dir mal »man sed« an, aber erschrick nicht; das Progrämmchen gehört zu denen mit einem hohen Lernaufwand. :)
Das angegebene Kommando entfernt alle mit »http://« beginnenden Ausdrücke bis zum nächsten Leerzeichen oder Zeilenende.
Kurze Erklärung:
s steht für "substitute", also ersetzen, dann folgt ein Trennzeichen, da habe ich mich für "!" entschieden, dann der zu ersetzende Text, nämlich jedes Zeichen, das nicht ("^") eines der beiden angegebenen (" \n", also Leerzeichen oder Zeilenende) ist, in beliebiger Anzahl ("*"), und der Text, mit dem man das ersetzen soll, steht zwischen den beiden folgenden Trennzeichen, nämlich gar nichts. "g" steht für "global", also nicht nur ein Treffer pro Zeile, sondern auch mehrere.
Mach Dich mal im Internet schlau über "Reguläre Ausdrücke".

Viel Spaß :D
 
Ohje. da werde Ich die Nächsten Wochen fleißig mit zu kämpfen haben *gg*
Ich meinte eigentlich folgendes.

1. - Ich habe eine datei x.txt in der mehrere Downloadlinks stehen (natürlich 1 Link pro Linie)
2. - Nun möchte ich via Shell einen beliebigen Link aus der Datei löschen.

Werde mich aber heute Abend mal fleißig an das Handbuch setzen.
 
Mal ganz dumm gefragt... Muss es denn unbedingt ein Shell-Script sein? Perl findet man faktisch auf jeder Kiste - egal ob Linux oder FreeBSD oder ganz was anderes - und es ist ein wesentlich mächtigeres Werkzeug. Gerade wenn es um das Verarbeiten von Texten geht. Vor allem ist (meiner bescheidenen Meinung nach) die Regexp-Engine wesentlich mächtiger und angenehmer zu bedienen als sed(1) es jemals sein kann.
 
Ja, es soll in Shell sein.

Es wäre mal an der Zeit, dass du dich einliesst, was eine Shell überhaupt ist.
Mit "in Shell" meinst du meistens dann auch noch, dass es für den Bourne against-Interpreter geschrieben sein soll.

Ob du "perl -pi -e Trallalla", oder "sed KOMPLETTAUSRASTER" in ein Shellscript schreibst ist vollkommen wumpe. Beides - perl und sed - sind Zusatzprogramme und nicht Bestandteil einer Shell.
 
und, so wie sich das für mich liest, könnte es auch eine einfache Alternative für dich sein, diese Datei xyz.txt einfach mit einem Editor deiner Wahl zu bearbeiten und die überflüssigen Zeilen manuell zu löschen.

Den Umweg mittels sed oder grep oder wie auch immer erst eine Ausgabe in eine neue Datei oder vielleicht auch in deiner shell zu erzeugen, wie das hier beschrieben wurde, kann man wirklich nur empfehlen. Ich selbst bin sehr unbedarft im Gebrauch der Kommandos auf der shell und brauche regelmäßig die man-page und bei sed auch meine Beispielsammlung, aber ich kann mir gut vorstellen, dass auch eingefleischte "Hacker" die Wirkung ihrer Befehle lieber erst kontrollieren möchten, anstatt unbarmherzig direkt umzusetzen. Syntax-Errors schleichen sich sehr leicht ein und es gibt keinen spelling checker für die shell ;)
 
sed oder awk

Ja, es soll in Shell sein.

sed oder awk könnte Dein Freund sein?

Aus der shell. Wenn ich mich recht erinnere geht das ganz gut mit awk oder sed.

Habe lange Zeit Skripte während unseres damaligen Jahr2ooo Programms geschrieben. Damals unter Linux, da mir auf dem firmeneigenen Unix kein Compiler zum übersetzen der SNMP Tools zur Verfügung stand. Der Basis Kernel Compiler, der zum Kernel basteln dabei war, konnte kein ANSI C. War eher ein verhuschtes make, wenn ich mich richtig erinnere.

Und die shell :huth: ist daher immer meine erste Wahl. Erst dann Fortran!

Und ganz zur Not geht das alles auch unter DOS! Interessant ist wie mächtig die wenigen Befehle des alten DOS (BATCH Scripte, damals noch unter NT 4) sind.

f41thr

P.S. Gulblins Unix System v4 Buch hat mir dabei damals sehr geholfen.
 
Zurück
Oben