GnuWin grep Zeilenende-Anker

GnuWin grep Zeilenende-Anker

Ich habe GnuWin auf einem Windows 7 Enterprise SP1 x64-Rechner installiert. Ich versuche, mit grep 2.5.3 nach Zeilen zu suchen, die das Wort „true“ enthalten. Folgendes ist mein funktionierender Anwendungsfall:

(echo true& echo true2) | grep 'true'

Das Obige trifft auf beide Zeilen zu. Jetzt möchte ich die zweite Zeile mithilfe des Zeilenendeankers $(Dollarzeichen) ausschließen. Ich habe die folgenden Varianten ausprobiert, von denen keine auf eine der Zeilen zutrifft:

(echo true& echo true2) | grep 'true$'
(echo true& echo true2) | grep 'true\$'
(echo true& echo true2) | grep 'true\\$'
(echo true& echo true2) | grep 'true\\\$'
(echo true& echo true2) | grep 'true\\\\$'
(echo true& echo true2) | grep 'true\\\\\$'
(echo true& echo true2) | grep 'true\\\\\\$'
(echo true& echo true2) | grep 'true^$'
(echo true& echo true2) | grep 'true^^$'
(echo true& echo true2) | grep 'true^^^$'
(echo true& echo true2) | grep 'true^^^^$'
(echo true& echo true2) | grep 'true^^^^^$'
(echo true& echo true2) | grep 'true^^^^^^$'
(echo true& echo true2) | grep 'true$$'
(echo true& echo true2) | grep 'true\^$'
(echo true& echo true2) | grep 'true^\$'
(echo true& echo true2) | grep 'true\\^$'
(echo true& echo true2) | grep 'true\^\$'
(echo true& echo true2) | grep 'true^\\$'
(echo true& echo true2) | grep 'true\^^$'
(echo true& echo true2) | grep 'true^\^$'
(echo true& echo true2) | grep 'true^^\$'
(echo true& echo true2) | grep 'true\\\^$'
(echo true& echo true2) | grep 'true\\^\$'
(echo true& echo true2) | grep 'true\^\\$'
(echo true& echo true2) | grep 'true^\\\$'
(echo true& echo true2) | grep 'true\\^^$'
(echo true& echo true2) | grep 'true\^\^$'
(echo true& echo true2) | grep 'true^\\^$'
(echo true& echo true2) | grep 'true\^^\$'
(echo true& echo true2) | grep 'true^\^\$'
(echo true& echo true2) | grep 'true^^\\$'
(echo true& echo true2) | grep 'true\^^^$'
(echo true& echo true2) | grep 'true^\^^$'
(echo true& echo true2) | grep 'true^^\^$'
(echo true& echo true2) | grep 'true^^^\$'

Ich habe auch jedes der oben genannten Verfahren mit doppelten Anführungszeichen statt einfachen Anführungszeichen versucht, was auch nicht funktioniert hat. Weiß jemand, wie man den regulären Ausdruck am Ende der Zeile verankert, sodass nur die erste Zeile aus meinem Beispiel („true“) übereinstimmt? Danke.

Antwort1

Cygwin:(echo true; echo true2) | grep true$

GnuWin:(echo true & echo true2) | grep "true $"

In cmd (echo true & echo true2)gibt es tatsächlichtrue \r\ntrue2\r\n

Antwort2

Dies stellte sich als eine Kombination von Problemen heraus. (echo true & echo true2)(Ich habe diesen Fehler aus meiner Frage entfernt, da er für das, was ich wirklich wissen wollte, nicht relevant war.) Auf einem Windows-Computer wird tatsächlich Folgendes ausgegeben:

true \r\n
true2\r\n

Das erste Problem ist also, dass meine Echo-Befehle ein überflüssiges Leerzeichen enthielten. Das zweite Problem ist, dass es als Zeilenende grepbehandelt wird , was in einer Antwort auf\nWarum funktioniert der Zeilenende-Anker $ nicht mit dem Grep-Befehl? Das zweite Problem besteht darin, dass ich das Zeichen in meinem regulären Ausdruck erfassen muss \r. Damit dies funktioniert, ist Folgendes erforderlich:

(echo true& echo true2) | grep 'true[[:space:]]*$'

verwandte Informationen