Syntax problem bei "grep"

T

Tittipoco

Jungspund
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 ?
 
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.
 
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
 
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
 
ö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*
 
Nehmen wir an, in der Datei "datei1" steht folgendes

CLIENT: PC1
CLIENT: PC2
C:\temp
D:\temp
CLIENT: PC3
CLIENT: PC4
c:\temp
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)

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

edit: ich schlage vor du speicherst dir das Resultat zwischen und verarbeitest es danach dann ensprechend weiter.
 
Zuletzt bearbeitet:
"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 ?
 
Zuletzt bearbeitet:
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.
 

Ähnliche Themen

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Timeout für Long Time Querys

verzeichniss suche funktioniert nicht

mittels if abfrage datei nach variabelnwert durchsuchen

Queue für copy Script

Zurück
Oben