이론: grep -f somefile
또는 grep --file=somefile
에 나열된 패턴 중 하나와 일치하는 모든 행을 찾습니다 somefile
. 비어 있으면 somefile
일치하는 항목이 없습니다. grep -v
다음 줄을 나열해 보세요 .원하지 않는다성냥.
요점: grep -f /dev/null
아무것도 일치하지 않고 grep -v -f /dev/null
모든 것이 일치합니다.
실험:지금 시도해 보세요
% echo blank | grep -f /dev/null
% echo bingo | grep -v -f /dev/null
bingo
결과:사실, 나는 bingo
한 컴퓨터에서 그것을 얻었습니다. (그리고 그게 전부입니다)
unix1% grep --version
grep (GNU grep) 2.20
하지만난 이해가 안 돼요bingo
! ? ! ? 이번에는 다른 컴퓨터에서
unix2% grep --version
grep (BSD grep) 2.5.1-FreeBSD
unix2% uname -rs
Darwin 14.0.0
질문:사양을 위한 여지가 있나요 grep
? 제가 법률 용어를 놓쳤나요? 아니면 grep (BSD grep) 2.5.1-FreeBSD
오프로드 차량인가요? 확실히 unix1에서 unix2로 스크립트를 포팅할 때 무엇이 잘못되었는지 알아내는 데 2시간이 걸렸습니다...
답변1
GNU grep 매뉴얼 페이지에서:
-f FILE, --file=FILE Obtain patterns from FILE, one per line. The empty file contains zero patterns, and therefore matches nothing. (-f is specified by POSIX.) -v, --invert-match Invert the sense of matching, to select non-matching lines. (-v is specified by POSIX.)
그래서 grep -f /dev/null
일치할 것입니다.아무것도 없다그것을 뒤집어서 grep -v -f /dev/null
일치시키세요.모든 것.
나는 많은 FreeBSD 시스템에 접근할 수 있지만,모두그들 중 일부는 GNU grep이 훨씬 더 좋았기 때문에 설치했습니다(둘 다속도기능과 기능이 있는 것처럼 보이지만BSD grep이 따라잡고 있습니다.). 여전히 차이점이 있습니다.단어 경계.
사양이 불분명할 수 있지만 이것이 BSD grep 버그라고 생각됩니다. "따라잡기" 링크 참고: BSD grep은 기본적으로 GNU grep의 더 허용적인 라이센스 복제입니다. 즉, 최소한 일부 측면에서는 항상 "뒤쳐져 있습니다".
가능하다면 BSD grep을 사용하는 시스템에 GNU grep을 설치하는 것이 좋습니다.
코드를 가능한 한 이식 가능하게 만들고 싶다면 왜 아무것도 없는지 물어볼 것입니다. 정확히 무엇을 달성하려고 합니까? 집중하는 것이 더 나을 수도 있습니다.