sed - Problem



  • Hallo Leute,

    ich schlage mich grad mit einen sed und regulären Ausdrücken rum.

    der Befehl

    sed -e/alex/d file_list.txt > file_list2.txt
    

    durchsucht die Datei file_list.txt nach dem Ausdruck "alex", wenn er Ihn findet, löscht er die Zeile, das in der ganzen Datei und erstellt mir eine Datei file_list2.txt!

    Funktioniert perfekt, ABER ... ich möchte das der Dateinamen gleich bleibt, weil ich möchte noch mehrere dieser Befehle ausführen (ich weiss nicht wieviele es sein werden)

    z.B.

    sed -e/alex/d file_list.txt
    
    sed -e/heinz/d file_list.txt
    
    sed -e/otto/d file_list.txt
    

    wie kann ich sagen, lösche alle diese Zeilen und speichere dann?

    Danke

    Gruss Alex 🙂



  • sed ist ein Programm und kein Befehl :p

    Wie wäre es mit sed -e '/foo/d; /bar/d' 🙂

    Siehe man: sed



  • danke Rüdiger,
    ja, sorry, mea culpa, natürlich ist sed ein Programm!
    was ist foo undwas ist bar? 😉
    ich vermute, "bar" ist der dateiname?

    ich kann es morgen erst testen.

    Danke

    Gruss Alex 😃



  • In der IT-Branche werden die Begriffe foo, bar und foobar auch als Platzhalter und Beispielnamen (Metasyntaktische Variablen) für Dateien, Routinen, Verzeichnisse, Funktionen, Prozesse, Variablennamen etc. verwendet. Deren Namen sind vollkommen irrelevant und beliebig austauschbar. Wenn in einem Beispiel ein dritter Platzhaltername benötigt wird, wählt man hierfür oft baz.

    Quelle



  • killerkipferl schrieb:

    In der IT-Branche werden die Begriffe foo, bar und foobar auch als Platzhalter und Beispielnamen (Metasyntaktische Variablen) für Dateien, Routinen, Verzeichnisse, Funktionen, Prozesse, Variablennamen etc. verwendet. Deren Namen sind vollkommen irrelevant und beliebig austauschbar. Wenn in einem Beispiel ein dritter Platzhaltername benötigt wird, wählt man hierfür oft baz.

    Hallo,

    ja das ist schon klar, aber wenn man nicht weiß für was "Foo" und "Bar" als Platzhalter stehen, bringt das nichts ...

    z.B. Der Satz ... heute ist foo bar.

    Weisst du was ich damit meine? Nein, wenn ich aber vorher sage:

    foo = ein schöner Tag
    bar =,es scheint die Sonne!

    Jetzt versteht man es!!!

    Gruss Alex



  • ergibt sich doch aus der Struktur: Wenn /x/d x löscht, dann löscht /foo/d foo und /bar/d bar...



  • Hallo Rüdiger,

    jetzt habe ich es geschnallt!
    Aber, ich weiss halt nicht was kommt, um die Datei zu editieren.
    Ich habe eine Datei file_list.txt, da stehen alle Dateien mit Pfaden drin.

    Dann habe ich eine Datei exceptions.txt, da stehen komplette Pfade und Datei sowie Endungen, die ich aus der Datei file_list.txt werfen will.

    ich möchte die Datei exception.txt einlesen und dann zeilen weise abarbeiten, wo bei ich vorher nicht ohne Aufwand weiß wieviele es werden.

    #!/bin/sh
    cat /exceptions.txt |while read a; do
        sed -e/$a/d file_list.txt
    done
    

    damit das sinnvoll wird, möchte ich die Datei bearbeiten, also die Zeilen löschen und dann unter selben Namen speichern, damit ich bei dem nächsten Durchlauf auf sie zugreifen kann. 😕

    Danke Dir!

    Gruss Alex



  • #!/bin/sh
    cat /exceptions.txt |while read a; do
        sed -e/$a/d file_list.txt
    done
    

    Da du ja schon eine Schleife verwendet hast,
    warum schreibst du das Ergebnis nicht in eine temporäre
    Datei und benennst diese dann anschließend wieder um?

    cat /exceptions.txt | while read a; do
        sed -e/$a/d file_list.txt > tmp_file_list.txt
        mv tmp_file_list.txt file_list.txt
    done
    

    Damit müsstest du das gewünschte Ergebnis erhalten.



  • Wie wäre es mit sed -e '/foo/d; /bar/d'

    Ansonsten meinte Rüdiger damit, dass du mit sed auch mehrere
    Aufgaben gleichzeitig erledigen kannst.
    Dann bräuchtest du den Namen der Datei nur einmal.

    Aber ob du das in deinem Problem so einbauen kannst, mußt du
    dir selbst mal überlegen.



  • GNU sed hat eine -i-Option (In-Place-Editing oder so), womit die Datei direkt editiert wird.

    Damit lässt sich das wohl auf einen Einzeiler reduzieren.


Anmelden zum Antworten