GnuWin grep Âncora de fim de linha

GnuWin grep Âncora de fim de linha

Eu tenho o GnuWin instalado em uma máquina Windows 7 Enterprise SP1 x64. Estou tentando usar o grep 2.5.3 para combinar linhas que contêm a palavra "true". A seguir está meu caso de uso de trabalho:

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

O acima corresponde a ambas as linhas. Agora quero excluir a segunda linha usando a âncora de fim de linha $(cifrão). Eu tentei as seguintes variantes, nenhuma das quais corresponde a nenhuma das linhas:

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

Também tentei cada uma das opções acima usando aspas duplas em vez de aspas simples, o que também não funcionou. Alguém sabe como ancorar a expressão regular no final da linha, de forma que apenas a primeira linha do meu exemplo ("true") corresponda? Obrigado.

Responder1

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

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

No cmd, (echo true & echo true2)na verdade dátrue \r\ntrue2\r\n

Responder2

Isso acabou sendo uma combinação de problemas. (echo true & echo true2)(Eu editei esse erro da minha pergunta, pois não era relevante para o que eu realmente queria saber) na verdade, gera o seguinte em uma máquina Windows:

true \r\n
true2\r\n

Portanto, o primeiro problema é que meus comandos echo incluíam um caractere de espaço estranho. A segunda questão é que greptrata \ncomo fim da linha, o que é explicado em resposta aPor que a âncora $ de fim de linha não funciona com o comando grep? Portanto, o segundo problema é que preciso capturar o \rcaractere na minha expressão regular. Portanto, o seguinte é o que é necessário para que isso funcione:

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

informação relacionada