grep -v -f /dev/null은 정확히 무엇을 합니까?

grep -v -f /dev/null은 정확히 무엇을 합니까?

이론: 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을 설치하는 것이 좋습니다.

코드를 가능한 한 이식 가능하게 만들고 싶다면 왜 아무것도 없는지 물어볼 것입니다. 정확히 무엇을 달성하려고 합니까? 집중하는 것이 더 나을 수도 있습니다.

관련 정보