Anzeige:
Ergebnis 1 bis 5 von 5

Thema: grep, sed oder was?!

  1. #1
    Registrierter Benutzer
    Registriert seit
    18.07.2004
    Beiträge
    7

    grep, sed oder was?!

    Hallo,
    ich bin auf meiner Suche nach einem Forum in dem ich meine Fragen stellen kann auf dieses hier gestossen. Nun habe ich mich angemeldet und versuche mal mein Glück.

    Mein Problem:
    Ich versuche das in 2 Stufen zu beschreiben, damit ich das besser begreife.
    Ich habe Informationen mehrere Dateien mit grep auflisten lassen. In diesen Dateien habe ich Informationen zusammengetragen.

    Die Auflistung sieht dann so aus:
    2S5DR85W2R6 [Irgendwelche Infos] [Weitere Infos]
    W25DRS852R6 [Irgendwelche Infos] [Weitere Infos]
    S5D2R85W2R6 [Irgendwelche Infos] [Weitere Infos]

    Diese Daten stehen in einer weiteren .tmp-Datei. Diesen 11'er-Block möchte ich nun so verändern (sed?), dass ich zu allererst eine feste Pfadangabe davor bekomme /var/log/ , dann jeweils hinder dem ersten und dem zweiten Buchstaben des 11'er-Blocks ein slash steht, dann der 11'er-Block dahinter:

    /var/log/2/S/2S5DR85W2R6 [Irgendwelche Infos] [Weitere Infos]
    /var/log/W/2/W25DRS852R6 [Irgendwelche Infos] [Weitere Infos]
    /var/log/S/5/S5D2R85W2R6 [Irgendwelche Infos] [Weitere Infos]

    Jetzt muss nur noch alles was hinter dem 11'er-Block steht gelöscht werden.

    /var/log/2/S/2S5DR85W2R6
    /var/log/W/2/W25DRS852R6
    /var/log/S/5/S5D2R85W2R6

    Das ist der erste Teil. Den 2. schaffe ich dann bestimmt selber, mal schauen.

    Wie stelle ich das an?! Die regulären Ausdrücke kenne ich schon ein wenig, nur mit der richtigen Anwendung komme ich noch nicht klar.

    Danke!
    Poi

  2. #2
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    ich glaub du suchst sowas:

    Code:
    perl -pe 's/((.?)(.?).+?) \[.*$/\/var\/log\/$2\/$3\/$1 /' test.txt
    der Ausdruck is zwar kein Meisterstück, aber er funktioniert bei mir! Es wir auf stdout ausgegeben.

    steve
    pornstars-online.de

  3. #3
    Registrierter Benutzer
    Registriert seit
    18.07.2004
    Beiträge
    7
    Zitat Zitat von Badsteve
    ich glaub du suchst sowas:

    Code:
    perl -pe 's/((.?)(.?).+?) \[.*$/\/var\/log\/$2\/$3\/$1 /' test.txt
    Bei mir kommen die Zeilen immernoch unbehandelt heraus.

    Verstehe ich das Script richtig?

    1. (.?) = $2 (irgendein 1. Zeichen)
    2. (.?) = $3 (irgendein 2. Zeichen)
    3. .+? = $1 (nur irgendein Wort am Anfang der Zeile bis zum 1. Leerzeichen)

    Ist dann die Ausgabe nicht verdreht?! Muss ich nochmal Buch lesen. Aber da ist eine "[" ohne "]"?! Absicht? Aus logischer Sicht würde das nicht hinhauen...

    Danke!
    Poi

  4. #4
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    Die ersten beiden Fragezeichen kannst du weglassen. (Ich weiß auch nicht, wo die herkommen) In $1 landet dann das erste "Wort", bis zum Leerzeichen. In $2 das erste Zeichen und in $3 das erste Zeichen. Die Namensgebung hat was damit zu in welcher Reihenfolge die Klammern geöffnet werden.
    Die "[" ist nur als Absicherung dazu, dass .* nicht zuviel matcht. Ich sehe aber erade, dass man das auch weglassen kann. Die Ausgabe ist nicht verdreht. Und bei mir funktioniert das auch.

    Code:
     perl -pe 's/((.)(.).+?) .*/\/var\/log\/$2\/$3\/$1/'
    Daten entweder mit einer Pipe übergeben, oder wie oben das datei.
    Hab leider keine Zeit.

    steve
    pornstars-online.de

  5. #5
    Registrierter Benutzer
    Registriert seit
    18.07.2004
    Beiträge
    7
    Zitat Zitat von Badsteve
    Code:
     perl -pe 's/((.)(.).+?) .*/\/var\/log\/$2\/$3\/$1/'
    Cooooooooooooooooooo.!

    Das klappt! Ich werde mir die Sequenz ganz genau unter die Lupe nehmen. Mal schauen, ob ich nun allein weiterkomme. Ansonsten rufe ich nochmal.

    Fetten Dank!!
    Poi

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •