다음 입력 파일을 고려하십시오.
1
2
3
4
달리는
{ grep -q 2; cat; } < infile
아무것도 인쇄하지 않습니다. 나는 그것을 인쇄 할 것으로 예상된다
3
4
변경하면 예상 출력을 얻을 수 있습니다.
{ sed -n 2q; cat; } < infile
첫 번째 명령이 예상 출력을 인쇄하지 않는 이유는 무엇입니까?
검색 가능한 입력 파일이며 OPTIONS 의 표준에 따라 다릅니다 .
-q
Quiet. Nothing shall be written to the standard output, regardless of
matching lines. Exit with zero status if an input line is selected.
그리고 APPLICATION USAGE ( 강하게 강조) 에서 아래로 :
이
-q
옵션을 사용하면 파일 그룹에 패턴 (또는 문자열)이 있는지 여부를 쉽게 확인할 수 있습니다. 여러 파일을 검색 할 때 성능이 향상됩니다 ( 첫 번째 일치 항목을 찾 자마자 종료 될 수 있기 때문에 ) [...]
이제 동일한 표준에 따라 ( 소개 , 입력 파일 아래에 있음 )
표준 유틸리티가 탐색 가능한 입력 파일을 읽고 파일 끝에 도달하기 전에 오류없이 종료되는 경우 , 유틸리티는 열린 파일 설명의 파일 오프셋이 유틸리티가 처리 한 마지막 바이트 바로 뒤에 올바르게 위치하도록해야합니다 [. ..]
tail -n +2 file
(sed -n 1q; cat) < file
...
두 번째 명령은 파일을 찾을 수있는 경우에만 첫 번째 명령과 같습니다.
왜 grep -q
전체 파일을 소비합니까?
이것은 gnu grep
중요하다면 ( Kusalananda 가 OpenBSD에서 동일한 일이 발생했음을 확인 했지만 )
grep
는 궁금한 점이 있으면 FreeGrep 이라는 포크입니다 .