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 grep
trata \n
como 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 \r
caractere na minha expressão regular. Portanto, o seguinte é o que é necessário para que isso funcione:
(echo true& echo true2) | grep 'true[[:space:]]*$'