Ancla de final de línea GnuWin grep

Ancla de final de línea GnuWin grep

Tengo GnuWin instalado en una máquina con Windows 7 Enterprise SP1 x64. Estoy intentando utilizar grep 2.5.3 para hacer coincidir líneas que contienen la palabra "verdadero". El siguiente es mi caso de uso de trabajo:

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

Lo anterior coincide con ambas líneas. Ahora quiero excluir la segunda línea usando el ancla de fin de línea $(signo de dólar). Probé las siguientes variantes, ninguna de las cuales coincide con ninguna de las líneas:

(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^^^\$'

También probé cada uno de los anteriores usando comillas dobles en lugar de comillas simples, lo que tampoco funcionó. ¿Alguien sabe cómo anclar la expresión regular al final de la línea, de modo que solo coincida la primera línea de mi ejemplo ("verdadero")? Gracias.

Respuesta1

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

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

En cmd, (echo true & echo true2)en realidad datrue \r\ntrue2\r\n

Respuesta2

Esto resultó ser una combinación de problemas. (echo true & echo true2)(Edité ese error de mi pregunta ya que no era relevante para lo que realmente quería saber) en realidad genera lo siguiente en una máquina con Windows:

true \r\n
true2\r\n

Entonces, el primer problema es que mis comandos de eco incluían un carácter de espacio extraño. La segunda cuestión es que grepse trata \ncomo el final de la línea, lo cual se explica en una respuesta a¿Por qué el ancla $ de final de línea no funciona con el comando grep? Entonces, el segundo problema es que necesito capturar el \rpersonaje en mi expresión regular. Por lo tanto, lo siguiente es lo que se necesita para que esto funcione:

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

información relacionada