2012-09-04 2 views
6

mac에서 grep (버전 정보 : grep (BSD grep) 2.5.1-FreeBSD) os 10.8은 라인 regex 모드 (-x)에서 실행될 때 공통 프리픽스를 공유하는 패턴에 문제가 있습니다. 다음 예제에서는 grep이 "test"및 "test2"를보고하지만 대신 "test"만보고됩니다. (단어 정규식 모드 (-w)에도 동일하게 적용됩니다).grep (BSD grep) 2.5.1-Mac OS에서의 FreeBSD 10.8 라인 겹쳐 쓰기 모드가 중복되지 않는 패턴

printf "test\ntest2\n" > f1.txt 
printf "test\ntest2\n" > f2.txt 
grep -x -F -f f1.txt f2.txt 

누구도 유사한 관찰을했거나 해결 방법을 알고 있습니까?

+0

은 버그처럼 보입니다. 자신을 테스트 할 수 없습니다. f1.txt에서 test2와 test2의 위치를 ​​변경해 보았습니까? – akostadinov

답변

4

확인 됨; 이것은 Apple 및/또는 FreeBSD grep의 버그처럼 보입니다. FreeBSD grep은 표준을 싫어하는 것입니다. 우리 고용주는 FreeBSD의 이상한 행동을 견지하기보다는 모든 Mac 시스템에 GNU grep을 설치합니다. 예, GNU grep은 예제에서 두 줄을 찾습니다.)

Mac 및 Linux 간의 이동성이 목표 인 경우에, 나는 강력하게 모두 grep을 포기하고 단지 perl를 사용하여 (또는) perl에 따라 ack 같은 것을 추천한다.

@ akostadinov 님이 f2.txt에서 더 짧은 패턴을 사용하기 전에 더 긴 패턴을 넣으라고 제안하면 버그를 해결할 수 있지만, 에 의존하는 것이 좋습니다. 이 장난감 예제에서 작동하지만 일반적으로 작동합니까? 그리고 알아 내면 얼마나 비쌉니까?