egrep, grep, fgrep Problem

G

gambit1978

Hi @ all,

dies ist mein erster Thread in eurem Forum und ich hab gleich mal ne gemeine Frage.

Ich schlage mich derzeit mit nem grep Problem herum.

In einem meiner Scripte mache ich ne Abfrage auf eine bestimmte Reg-Expr am Anfang der betreffenden Zeile. z.B.:
ls -l /pfad/zum/ziel | awk '{ print $9 }' | grep '^dateiname'

Rockt auf meiner "Entwicklungsmaschine" (Suse) auch absolut astrein.
Nur wenn ich selbiges Kommando unter Debian aufrufe macht der mir den "grep" nicht! Die eingegebene Syntax ist 100%ig exakt die selbe!
Mache ich nen grep -v zeigt er mir dann auch brav die gewünschte Expression als nichtauffindbar an. Nur WARUM?

Mein erster Verdacht fiel auf unterschiedliche grep-Versionen. Habe dann kurzerhand die funktionierende grep der Suse-Maschine auf den Debian transferiert -> ohne Ergebnis. Sobald ich Parameter für Zeilenanfang ( ^ ) oder Zeilenende ( $ ) ins Spiel bringe löst der mir die Expressions nicht mehr auf.

Hab mir jetzt einige Stunden dieses Problem um die Ohren geschlagen und noch immer keinen Lösungsansatz... ?(
Wie schon gesagt, auf der Suse-Kiste gehen die Befehle sofort und ohne Probleme, nur der Debian-Knecht weigert sich standhaft.

Hat von euch wer evtl. noch ne Idee?
 
Hallo,

versuchs doch mal so:

Code:
ls -l /pfad/zum/ziel | awk '{ print $8 }' | grep -E '^dateiname'

bzw. so...

Code:
ls -l /pfad/zum/ziel | awk '/dateiname/ { print $8 }'

oder... :)
 
Zuletzt bearbeitet:
gambit1978 schrieb:
Hi @ all,

ls -l /pfad/zum/ziel | awk '{ print $9 }' | grep '^dateiname'
Sobald ich Parameter für Zeilenanfang ( ^ ) oder Zeilenende ( $ ) ins Spiel bringe löst der mir die Expressions nicht mehr auf.

...
Wie schon gesagt, auf der Suse-Kiste gehen die Befehle sofort und ohne Probleme, nur der Debian-Knecht weigert sich standhaft.
Warum so Umständlich?
Wenn dich nur der Dateiname interessiert genügt zunächst
ls -1|grep '^filename'
Ich kann zwar nicht nachvollziehen, was SyZe da anders macht, aber scheinbar liegt es weniger am grep als an den Systemeinstellungen.
Damit der Matcher auf Zeilenanfang und Ende richtig funktioniert, muss sichergestellt sein, dass auch die richtigen RS(Recordseperator) verwendet werden. Unter Unixodiden Systemen ist das üblicherweise ein \n. Unter M$schrott ein \r\n.
Im Falle von Filelisting können dir aber auch dubiose Dateinamen ein Schnippchen schlagen.
In sochen Fällen hilft meist die Verwendung von \0 als Zeilentrenner.
Das in Kombination mit find xargs und der Option -Z bei grep könnte helfen.
Example:
Finde alle Dateien mit der Endung ~ ->auch solche mit Leerzeilen und Zeilenumbrüchen in Dateinamen werden so richtig aufgelistet.

find . -type f -printf "%f\0"|xargs -0 -n1|grep -Z '~$'

Gruß Wolfgang
Schau dir auchmal deine Einstellungen der verwendeten locale an.
Wenn du dass auf POSIX setzt und es dann geht, bist du auf dem richtigen Weg der Ursachenforschung.
man grep
sagt dir mehr dazu.
;)
 
Zurück
Oben