GnuWin grep Якорь конца строки

GnuWin grep Якорь конца строки

У меня установлен GnuWin на машине Windows 7 Enterprise SP1 x64. Я пытаюсь использовать grep 2.5.3 для сопоставления строк, содержащих слово "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^\^^$'
(echo true& echo true2) | grep 'true^^\^$'
(echo true& echo true2) | grep 'true^^^\$'

Я также попробовал каждый из вышеперечисленных вариантов, используя двойные кавычки вместо одинарных, что тоже не сработало. Кто-нибудь знает, как привязать регулярное выражение к концу строки, чтобы совпадала только первая строка из моего примера («true»)? Спасибо.

решение1

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

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

В cmd (echo true & echo true2)на самом деле даетtrue \r\ntrue2\r\n

решение2

Оказалось, что это была комбинация проблем. (echo true & echo true2)(Я убрал эту ошибку из своего вопроса, поскольку она не имела отношения к тому, что я на самом деле хотел узнать) на самом деле выводит следующее на компьютере с Windows:

true \r\n
true2\r\n

Итак, первая проблема в том, что мои команды echo включали лишний символ пробела. Вторая проблема в том, что это grepвоспринимается \nкак конец строки, что объясняется в ответе наПочему символ конца строки $ не работает с командой grep? Итак, вторая проблема в том, что мне нужно захватить \rсимвол в моем регулярном выражении. Поэтому, чтобы это заработало, нужно сделать следующее:

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

Связанный контент