보내는 사람 man grep(데비안) 페이지 :
기술
grep searches the named input FILEs (or standard input if no files are
named, or if a single hyphen-minus (-) is given as file name) for lines
containing a match to the given PATTERN. By default, grep prints the
matching lines.
첫 번째 경우 grep파일을 엽니 다. 두 번째로, 쉘은 파일을 열고 표준 입력에 할당하며 grep, grep파일 이름 인수가 전달되지 않으면 표준 입력을 grep해야한다고 가정합니다.
1의 장점
grep 하나 이상의 파일을 grep 할 수 있습니다 ¹.
grep각 발생 line이 발견 된 파일 이름을 표시 할 수 있습니다 .
2의 장점
성능면에서 파일을 열 수 없으면 grep리디렉션 을 사용할 때 실행을 저장 하지만 그렇지 않으면 grep큰 차이가 없습니다.
리디렉션을 사용하면에 추가 인수를 전달하지 않아도 grep되므로 grep인수 구문 분석이 약간 쉬워집니다. 반면에, 쉘은 dup2()파일 디스크립터 0에 대한 파일 디스크립터에 대한 추가 시스템 호출을 적어도 필요 로합니다.
에서 { grep -m1 line; next command; } < file, grep(여기에 GNU 것은 grep) 할 것 seek()(가) 그래서 그냥 일치하는 행 다음에 백업 next command파일의 나머지 부분을보고 (이 또한 파일이 시크인지 여부를 결정해야합니다). 다시 말해서, stdin 내의 위치는의 다른 grep출력 중 하나입니다 . 을 사용 grep -m1 line file하면이를 최적화 할 수 있습니다 grep.
노트
¹를 사용 zsh하면 다음을 수행 할 수 있습니다.
grep line < file1 < file2
그러나 cat file1 file2 | grep line( cat유틸리티 를 호출하지 않고) 동등한 기능을 수행 하므로 효율성이 떨어 지므로 첫 번째 파일이 줄 바꿈 문자로 끝나지 않고 패턴이 발견 된 파일을 알려주지 않으면 혼동을 일으킬 수 있습니다.
² ksh93와 bash같은 경우 /dev/tcp/host/port(및 /dev/fd/x일부 시스템에 bash) 리디렉션 대상으로 사용될 때 셸이 실제로 파일 시스템에서 파일을 여는 대신 특수 목적으로 가로채는 파일이 있습니다 (일반적으로 해당 파일은 파일 시스템에 존재하지 않습니다). /dev/stdin에 -의해 인식되는 것과 동일한 목적을 수행 grep하지만 적어도 여기에는 네임 스페이스가 더 적절합니다 ( -모든 디렉토리에서 파일을 만들 수는 있지만 관리자 만 파일을 만들 수 /dev/tcp/host/port있으며 관리자는 더 잘 알고 있어야 함).