2009-04-25 11 views
2

Ich habe eine große Datei, in der jede Zeile eine Teilzeichenfolge wie ABC123 enthält. Wenn ichbasic grep

grep ABC file.txt 

oder

grep ABC1 file.txt 

ausführen bekomme ich diese Zeilen zurück, wie erwartet, aber wenn ich

grep ABC12 file.txt 

ausführen nicht grep die entsprechenden Zeilen zu finden.

Das scheint ziemlich triviale Funktionalität, aber ich bin kein starker Benutzer von grep so vielleicht fehlt mir etwas Gotcha.

+0

Also, lassen Sie mich mein Verständnis überprüfen. In der Datei, die ABC123 enthält, befinden sich mehrere Zeilen. Wenn Sie Grep mit ABC oder ABC1 ausführen, erhalten Sie diese Zeilen zurück; Wenn Sie Grep ABC12 ausführen, erhalten Sie diese Zeilen nicht zurück? Das ist ziemlich unwahrscheinlich - grep funktioniert mit langen regulären Ausdrücken und 5 oder 6 Zeichen sind nicht lang. Angenommen, Pilotfehler. Welche Plattform? Welche Version von Grep? (Sie haben recht; was Sie tun, ist trivial. Mein Verdacht müsste sein, dass die Datei nicht das enthält, was Sie denken.) –

+0

Bitte senden Sie einige Beispieldaten und Befehl ** kopiert und eingefügt ** aus den tatsächlichen Dateien und Befehle, die Sie verwenden, um das Problem zu reproduzieren. –

+1

Die Datei enthielt tatsächlich ein nicht druckbares Zeichen zwischen den 2 und 3 Zeichen, die sonst nicht angezeigt wurden. Im Nachhinein hätte dies die offensichtliche Erklärung sein müssen. Der od-Dienst erwies sich als sehr hilfreich. – user14128

Antwort

5

Verwendung so etwas wie

od -x -a < filename 

den Inhalt der Datei in Hex-Dump aus. Das zeigt Ihnen sofort, ob das, was Sie in Ihrer Datei haben, das ist, was Sie erwarten. Was ich vermute, ist es nicht :-)

Hinweis: od hat viele nützliche Optionen, um Ihnen hier zu helfen. Zu viele, um sie aufzulisten.

0

Dies macht keinen Sinn. Sind Sie sicher, dass die Datei "ABC123" enthält?

Sie können dies überprüfen, indem

echo "ABC123" | grep ABC12 
0

folgenden Befehl in einer Shell ausgeführt Wenn die Linien ABC123 enthalten, sollten dann bekommen "grep ABC12" sie. Meinst du vielleicht, dass du mehrere verschiedene Zeichenketten wie ABC1, ABC2 und ABC3 zusammenbringen willst? In diesem Fall können Sie versuchen, diese:

grep -E 'ABC1|ABC2|ABC3' 
0

Ich bin nicht sicher, was das Problem ist .. grep funktioniert genau so, wie es sein sollte .. Zum Beispiel können die Inhalte meiner Testdatei:

$ cat file.txt 
ABC 
ABC1 
ABC12 
ABC123 

..und dass das grepen für ABC, ABC1, ABC12, ABC123:

$ grep ABC file.txt 
ABC 
ABC1 
ABC12 
ABC123 
$ grep ABC1 file.txt 
ABC1 
ABC12 
ABC123 
$ grep ABC12 file.txt 
ABC12 
ABC123 
$ grep ABC123 file.txt 
ABC123 

grep im Prinzip ein Filter ist, jede Linie, die das erste Argument (ABC, oder ABC1 usw.) angezeigt werden enthalten. Wenn es nicht die gesamte Zeichenfolge enthält, wird es nicht angezeigt

3

Gibt es eine Chance, Ihre Datei enthält einige versteckte Zeichen wie 0x00?