• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Ausgabe von 'grep' ein Leerzeichen?

OsunSeyi

Hacker
Hi,
nur eine Verständnisfrage..
wieso gibt 'grep', wenn es nichts findet, ein Leerzeichen aus?
Im konkreten Beispiel geht es darum, zwei Dateien zeilenweise zu vergleichen:
Code:
	for i in `cat $tmp0` ; do

		expr=`grep -z "$i" $tmp1`

			# Wenn 'grep' nichts findet,
			# ist die Ausgabe immer noch ein Leerzeichen:

		if [ "$expr" = ' ' ] ; then
			echo $i
		fi	
	done
tom

BTW1:
"for i in `cat $tmp0`" funktioniert wohl nur, weil die jeweilige Zeile kein Space enthält,
geht sonst nur :
"cat $tmp0 | while read i ; do ..."
oder gibt's noch andere Wege, zeilenweise auszulesen?

BTW2:
Warum werden in Variablen immer die Leerzeichen 'eingedampft' ?
 
oder gibt's noch andere Wege, zeilenweise auszulesen?
Ja, aber mit bash wird's haarig weil Dateinamen auch mehrere Zeilen lang sein dürfen. (Siehe a.a.O.) Eingedampft, weil das so in $IFS festgelegt ist.
wieso gibt 'grep', wenn es nichts findet, ein Leerzeichen aus?
Hat mit grep nichts zu tun, wie ein
Code:
echo "$gibtsnicht"
zeigt. echo fügt eben generell ein Newline an.

Wieso nimmst du nicht einfach `diff -dpru a b`, um zwei Dateien zu vergleichen?
 
OP
OsunSeyi

OsunSeyi

Hacker
Sorry- hab mich hier fehlleiten lassen.
Die Ursache, warum's hier nicht klappen will, ist, dass der zu bearbeitende Text Zeichen enthält, auf die Grep reagiert.
Wie: * ^ aber auch [:digit:].
Nahm irttümlich an, dazu wäre die Option -e (oder egrep) erforderlich.
Jetzt stellt sich die Frage, wie bringe ich grep dazu, dies zu ignorieren (ohne extra alles maskieren zu müssen).
tom
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OK, vielen Dank soweit, es geht tatsächlich viel einfacher mit diff !!!
 

regexer

Advanced Hacker
Und würde man grep verwenden, wäre es sowieso besser, den Rückgabewert von grep zu prüfen. In etwa so:
Code:
if grep -q "test" file.txt
then
  echo "grep hat was gefunden"
else
  echo "grep hat nichts gefunden"
fi
 
Oben