Syntax problem bei "grep"

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Tittipoco, 26.10.2006.

  1. #1 Tittipoco, 26.10.2006
    Tittipoco

    Tittipoco Jungspund

    Dabei seit:
    25.09.2006
    Beiträge:
    21
    Zustimmungen:
    0
    Halli Hallo,

    ich lasse eine Datei Zeilenweise auslesen und jeweils die aktuelle Zeile in der Variable $ZEILE speichern.

    jetzt gibt es einige Zeilen, die den Inhalt "\" haben. Genau diese Zeilen möchte ich lokalisieren.

    Ich habe mir gedacht ich mach folgenden Aufruf:
    TEST=$(echo "$ZEILE" ö grep "\\")
    if test ! -z "$TEST"
    then
    irgendein Code
    fi

    aber das klappt leider nicht. Wahrscheinlich wegen dem "\\" könnt ihr mir da weiter helfen ?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Peregrine, 26.10.2006
    Peregrine

    Peregrine Honorarkonsul

    Dabei seit:
    03.08.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ort:
    München, Bayern, Germany
    So ganz begriffen hab' ich es leider nicht, was du mit dem Ding anstellen möchtest :-)
    Um herauszufinden welche Zeilen nur \ enthalten würde ich folgendes versuchen
    Code:
    sed -n '/^\\$/=' eingabedatei
    Es werden die Zeilennummern ausgegeben, in denen der Ausdruck vorkommt.
     
  4. #3 Tittipoco, 26.10.2006
    Tittipoco

    Tittipoco Jungspund

    Dabei seit:
    25.09.2006
    Beiträge:
    21
    Zustimmungen:
    0
    hm, hilft mir leider nicht ganz weiter.
    also nochmal:

    eine Beispieldatei:
    CLIENT: PC1
    CLIENT: PC2
    C:\temp
    D:\temp
    CLIENT: PC3
    CLIENT: PC4
    c:\temp

    so. Von wieder Datei brauch ich nur bestimmte Einträge. Undzwar die Clients wo auch Pfade zu stehen und die Pfade selber.
    Also dann

    CLIENT: PC2
    C:\temp
    D:\temp
    und
    CLIENT: PC4
    c:\temp

    hier noch der Code den ich bis jetzt hab:

    cat "$DATEI" ö grep -E "CLIENTöUNCOVEREDöMULTIPLE" ö while read ZEILE
    do
    CTEST=$(echo "$ZEILE" ö grep CLIENT)
    if test ! -z "$CTEST"
    then
    CLIENT=$(echo "$ZEILE" ö grep CLIENT ö awk 'äprint $2ü')
    fi
    WERTTESTEINS=$(echo "$ZEILE" ö grep "/")
    WERTTESTZWEI=$(echo "$ZEILE" ö grep "ÖÖ")
    if test ! -z "$WERTTESTEINS" -o ! -z "$WERTTESTZWEI"
    then
    ZEILE=$(echo "$CLIENT $ZEILE")
    echo "$ZEILE" >> "$AUSGABE"
    fi
    done

    PS: keine Angst mit den komischen Zeichen (Ö oder ä oder ü) die sind schon richtig werden bei mir nur anders dargestellt
     
  5. #4 Peregrine, 26.10.2006
    Peregrine

    Peregrine Honorarkonsul

    Dabei seit:
    03.08.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ort:
    München, Bayern, Germany
    Harrrr!
    Folgendes sollte gehen - hab's soeben getestet. Solltest du nicht verstehen was das Script anstellt (sed hauptsächlich) einfach fragen :)). "datei" ist übrigens logischerweise die Ausgangsdatei, in der deine Daten drinstecken.

    Code:
    tr -d '\n' < datei | sed 's/CLIENT.....CL/CL/g' | sed 's/[A-Za-z]\:\\/\n&/g' | sed 's/CLIENT/\n&/g'
    Quick & Dirty, ich weiß... :D
     
  6. #5 Tittipoco, 26.10.2006
    Tittipoco

    Tittipoco Jungspund

    Dabei seit:
    25.09.2006
    Beiträge:
    21
    Zustimmungen:
    0
    öhm ja, das sieht mir mal sehr kompliziert aus ^^

    und weil ich nicht weiss wie genau das funktionieren soll, kann ich es auch nicht in mein Script einbetten. hab es grad mal kopiert und meine Variable eingesetzt. aber nix passiert *nub*
     
  7. #6 supersucker, 26.10.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    vs.

     
  8. #7 Peregrine, 26.10.2006
    Zuletzt bearbeitet: 26.10.2006
    Peregrine

    Peregrine Honorarkonsul

    Dabei seit:
    03.08.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ort:
    München, Bayern, Germany
    Nehmen wir an, in der Datei "datei1" steht folgendes

    dann liefert der Script

    Code:
    tr -d '\n' < [B]datei1[/B] | sed 's/CLIENT.....CL/CL/g' | sed 's/[A-Za-z]\:\\/\n&/g' | sed 's/CLIENT/\n&/g'
    bei mir folgende Ausgabe (am Bildschirm, müsste halt zur Weiterverarbeitung noch umgeleitet werden)

    edit: ich schlage vor du speicherst dir das Resultat zwischen und verarbeitest es danach dann ensprechend weiter.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 Tittipoco, 26.10.2006
    Zuletzt bearbeitet: 26.10.2006
    Tittipoco

    Tittipoco Jungspund

    Dabei seit:
    25.09.2006
    Beiträge:
    21
    Zustimmungen:
    0
    "hab es grad mal kopiert und meine Variable eingesetzt."

    vielleicht wäre es hilfreich wenn du mir kurz beschreiben könntest welcher Command was genau bewirkt ?
     
  11. #9 Peregrine, 26.10.2006
    Peregrine

    Peregrine Honorarkonsul

    Dabei seit:
    03.08.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ort:
    München, Bayern, Germany
    Ok, ich nehme mal an du bist mit der generellen Bash-Syntax vertraut (z.B. Pipe).

    Code:
    tr -d '\n' < datei1 
    Zur weiteren Verarbeitung mit sed hab ich den kompletten Dateiinhalt in eine Zeile verbannt - sed arbeitet wie man weiss nur Zeilenbasiert und da ich ein so großer Fan von sed bin, muss das so gelöst werden! :))

    Code:
    sed 's/CLIENT.....CL/CL/g' 
    Hier werden die Einträr rausgelöscht, denen kein Pfad folgt. Die Punkte matchen x-beliebige Zeichen. So wird beispielsweise hier bei "CLIENT: PC1CLIENT: PC2" der String "CLIENT: PC1" rausgekegelt und es bleibt "CLIENT: PC2". Und es wird weitergesucht...

    Code:
    sed 's/[A-Za-z]\:\\/\n&/g'
    Alles befindet sich im Moment ja noch in einer Zeile. Du solltest dir die Ausgabe der einzelnen Schritte einmal anschauen um zu begreifen wie der Script tut. Um das ganze wieder in eine lesbare Form zu bringen wird hier vor dem Pfad ein Newline-Character eingefügt.

    Code:
    sed 's/CLIENT/\n&/g'
    und hier vor jedem "CLIENT". Am besten kuckst du dir die man sed kurz an - ist wirklich ganz einfach zu begreifen, pfeilschnell und simpel anpassbar.
     
Thema:

Syntax problem bei "grep"

Die Seite wird geladen...

Syntax problem bei "grep" - Ähnliche Themen

  1. probleme mit syntax

    probleme mit syntax: Sers Leute ich mal wieder :> ich hab ein kleines Prob mit meiner shellsyntax #!bin/ksh set cpu `vmstat 2 2 | tail -1` cpu_all=${cpu[14]}...
  2. SED Syntaxproblem

    SED Syntaxproblem: Hallo ich moechte die Ausgabe aus folgendem Konstrukt an eine Variable uebergeben: #!/bin/sh mplayer -vo null -ao null -frames 0 -identify...
  3. iptables Problem mit der Syntax ethx

    iptables Problem mit der Syntax ethx: Hallo, ich habe ein Script für meine eigenen iptables rules geschrieben. Das Startscript funktioniert wunderbar. Die Regeln werden geladen....
  4. rsh mit awk Syntax problem

    rsh mit awk Syntax problem: halli hallo, ich habe ein Syntax problem bei folgendem Aufruf: rsh $SERVER -n "cat $LOGGESTERN ö grep PrintFile ö grep $SUCH ö awk -v...
  5. Problem: syntax error near unexpected token `done'

    Problem: syntax error near unexpected token `done': hi leute, hab beim folgenden code probleme!! #!/bin/bash lauf=0 ende=5 while [ $lauf -le $ende ] do find / -atime -6 lauf= expr $lauf+1...