Windows 7 Enterprise SP1 x64 시스템에 GnuWin을 설치했습니다. "true"라는 단어가 포함된 행을 일치시키기 위해 grep 2.5.3을 사용하려고 합니다. 다음은 내 작업 사용 사례입니다.
(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
시그윈:(echo true; echo true2) | grep true$
그누윈:(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
따라서 첫 번째 문제는 내 에코 명령에 불필요한 공백 문자가 포함되어 있다는 것입니다. 두 번째 문제는 라인의 끝으로 grep
취급된다는 것입니다. 이는 다음에 대한 답변에서 설명됩니다.\n
줄 끝 $ 앵커가 grep 명령과 함께 작동하지 않는 이유는 무엇입니까?\r
두 번째 문제는 정규식에서 문자를 캡처해야 한다는 것입니다 . 따라서 이 작업을 수행하려면 다음이 필요합니다.
(echo true& echo true2) | grep 'true[[:space:]]*$'