GnuWin grep Âncora de fim de linha

0

Eu tenho o GnuWin instalado em uma máquina Windows 7 Enterprise SP1 x64. Eu estou tentando usar o grep 2.5.3 para coincidir com linhas contendo a palavra "true". O seguinte é o meu caso de uso de trabalho:

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

O acima corresponde a ambas as linhas. Agora eu quero excluir a segunda linha usando a âncora de final de linha $ (sinal de dólar). Eu tentei as seguintes variantes, nenhuma das quais corresponde a nenhuma das duas 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^^^\$'

Eu também tentei cada um dos itens 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 modo que apenas a primeira linha do meu exemplo ("true") corresponda? Obrigado.

    
por Jeff G 22.06.2016 / 17:35

2 respostas

0

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

true \r\n
true2\r\n

Portanto, o primeiro problema é que meus comandos de eco incluíram um caractere de espaço estranho. A segunda questão é que grep trata \n como o fim da linha, o que é explicado em uma resposta a Por que o fim -de-linha $ anchor não funciona com o comando grep? Então, o segundo problema é que eu preciso capturar o caractere \r na minha expressão regular. Portanto, o seguinte é o que é necessário para que isso funcione:

(echo true& echo true2) | grep 'true[[:space:]]*$'
    
por 22.06.2016 / 20:27
2

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

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

Em cmd, (echo true & echo true2) fornece true \r\ntrue2\r\n

    
por 22.06.2016 / 19:10