파이프와 함께 grep 사용에 문제가 있습니다. 시나리오는 다음과 같습니다 : 화면에 디버그 메시지를 출력 (인쇄 사용)하는 python 스크립트를 실행하고 있습니다. 나는 ./prog | grep "\[\[\[\["
을 사용하여 "[[["안에 문자열을 포착합니다. 일치하는 결과는 거의 반환하지 않지만 다른 결과는 반환하지 않습니다 (또 다른 관찰 : grep에서 찾은 결과가 grep에서 찾지 못한 결과보다 먼저 나타납니다). 나는 파이프와 grep없이 ./prog
을 돌렸고 "[[[["pattern.grep이 일치하는 모든 패턴을 찾을 수 없습니다. " [ [ [" "
답변
오류 메시지는 보통 stderr
으로 전송되며 stdout
이 아닙니다. 귀하의 파이프는 stdout
입니다. (귀하의 "또 다른 관찰은"이 암시.) 당신은 파이프에 stdout
와 함께 stderr
를 리디렉션 할 수 있습니다 :
./prog 2>&1 | grep '\[\[\[\['
문제는 왼쪽 대괄호는 정규 표현식에서 특수 문자 것입니다. "grep"은 문자열 일치자가 아닙니다. 정규 표현식은 텍스트 패턴을 설명 할 수있는 관련 언어입니다. Grep은 [[[[
을 문자열이 아닌 정규 표현식으로 해석하려고합니다.
질문 주제에서 알 수 있듯이 일반적으로 특수 문자는 백 슬래시로 이스케이프 처리 할 수 있습니다. 그래서 다음은 작동 할 수 있습니다 :
./prog | grep '\[\[\[\['
당신은 또한 그들에게 내부 대괄호를 넣어 대괄호 "탈출"할 수 있습니다. 따라서 grep 버전에서 처리하는 경우 [[][[][[][[]
또는 [[]{4}
입니다.
또한 프로그램이 ./prog
의 출력을 "표준 출력"또는 "표준 오류"로 보낼지 여부를 결정해야합니다.
./proc 2>&1 | egrep '[[]{4}'
UPDATE : 당신과 함께 파이프를 통해 모든 표준 에러를 넣을 수 있습니다
[[email protected] ~]$ printf '[[[[\n[[[\n[[[[\n[[[[[\n[[\n' | grep '\[\[\[\['
[[[[
[[[[
[[[[[
[[email protected] ~]$ printf '[[[[\n[[[\n[[[[\n[[[[[\n[[\n' | egrep '[[]{4}'
[[[[
[[[[
[[[[[
[[email protected] ~]$
물론, 내 결과가 당신과 일치하지 않습니다. 처리중인 데이터에 대해 더 자세한 정보를 제공 할 수 있다면 결과를 복제하는 데 도움이됩니다.
Ghoti, 답장을 보내 주셔서 감사합니다. 앞서 언급하지는 않았지만 첫 번째 옵션으로 설명한 것처럼 일치 패턴에 이스케이프 시퀀스를 사용하고 있습니다. 그러나 문제는 동일한 패턴을 따르더라도 처음 두 문장이 화면에 인쇄되고 마지막 두 문장은 인쇄되지 않는다는 것입니다. – user1126425
또한 화면에 인쇄 할 때 '인쇄'기능 만 사용하기 때문에 stderr와 아무 관련이 없습니다. 어쨌든, 나는 그런 방식으로 시도해 보았지만 효과가 없었다. 다른 생각은 많이 감사 할 것입니다. – user1126425
@ user1126425 - 내가 제공 한 답변은 귀하의 질문에서 세부 사항의 양을 고려할 때 내가 생각해 낼 수있는 최선입니다. 결과를 복제 할 수 있도록 예제 데이터로 질문을 업데이트 할 수 있다면 문제가 무엇인지 파악할 수 있습니다. 그것이 그대로, 이것은 제가 갈 수있는 한입니다. – ghoti
- 1. 요소 목록에서 일치하는 패턴을 찾을 수 있습니다.
- 2. 작동하는 sed 패턴을 찾을 수 없습니다.
- 3. 태그를 일치하는 모든 스피너를 찾을
- 4. 모든 일치하는 패턴을 한 줄/파일에서 추출하십시오.
- 5. 내 작성자 패턴에서 일치하는 생성자 오류를 찾을 수 없습니다.
- 6. 패턴을 외국어와 일치하는 경우
- 7. CakePHP2.1은 반환 배열에 MODELNAME를 찾을 수 없습니다 ('모든') 찾을 수
- 8. stringtemplate 변수와 일치하는 패턴을 추출하십시오.
- 9. VS2012 WebAPI : 'CpbOutcome'컨트롤러와 일치하는 유형을 찾을 수 없습니다.
- 10. 기호 검색이 불가능합니까? 어떤 와 일치하는 문서를 찾을 수 없습니다 - £ -
- 11. 일치하는 와일드 카드가 엄격하지만 요소에 대한 선언을 찾을 수 없습니다.
- 12. 끝점에 대한 구성표 net.tcp와 일치하는 기본 주소를 찾을 수 없습니다.
- 13. (id 참조를 찾을 수 없음) 주어진 이름과 일치하는 리소스가 없습니다
- 14. 일치하는 하위 트리를 어떻게 찾을 수 있습니까?
- 15. 열에서 일치하는 패턴을 잘라 내기
- 16. vim grep이 첫 번째 일치하는 파일을 열지 못하게하십시오.
- 17. grep과 일치하는 파일의 패턴을 확인하는 방법은 무엇입니까?
- 18. 'Moles'키를 찾을 수 없습니다.
- 19. PATINDEX()로 식별되는 패턴을 찾을 수 있습니까?
- 20. Access 2007 검색 양식이 빈 필드 때문에 모든 값을 반환하지 않습니다. 일치하는 LIKE를 찾을 수 없습니다.
- 21. 리소스를 찾을 수 없습니다.
- 22. Interop.Word를 찾을 수 없습니다.
- 23. UILabelAdditions.h을 찾을 수 없습니다.
- 24. EncryptOrDecryptData를 찾을 수 없습니다.
- 25. SplFixedArray를 찾을 수 없습니다.
- 26. EntitySet을 찾을 수 없습니다.
- 27. "리소스를 찾을 수 없습니다"
- 28. Gemfile을 찾을 수 없습니다.
- 29. Pdssql.dll을 찾을 수 없습니다.
- 30. AppDelegate.m을 찾을 수 없습니다.
미안하지만 분명히 말하지 않았지만 메시지를 인쇄하기 위해 'print'를 사용하고 있다고 말할 때 나는 그 모두가 표준 출력으로 갈 것이라고 생각했습니다. 어쨌든, 나는 당신의 제안도 시도했지만 도움이되지 않았습니다. 다른 아이디어? – user1126425
질문을 자세히 업데이트해야 할 수도 있습니다. 또한 마크 업 도움말 링크를 따라 가면 예제가 HTML로 잘못 해석되지 않습니다. – geekosaur