내 문제를 설명하는 이 게시물을 발견했습니다. “foo World”를 포함하는 file.txt
라는 파일이 있다고 가정합니다.
Tyler가 게시 한 답변은 많은 것을 설명하지만 어떻게해야하는지 혼란 스럽습니다.
cat file.txt | grep "foo"
유사
grep "foo" file.txt
grep
는 다음
grep input argument // input is the string to search for (i.e) foo and // argument is the file path (./file.txt)
이제 cat file.txt
의 출력은 이것은 grep
의 입력이됩니까? 나 맞아? 그렇다면 grep
에 파일 경로가 문자열로 필요하다고 생각 했습니까?
댓글
Answer
대부분의 명령은 입력을 위해 열어야하는 파일이거나 STDIN을 통해 명령에 전달되는 데이터 스트림입니다.
cat file.txt
는 파이프 (|
)를 통해 다른 명령으로 전송됩니다. 출력은 STDOUT을 통해 왼쪽에있는 파이프로 전달되고 설정되고 다음 명령에 공급됩니다. “s on the right side of the pipe”s STDIN.
내용이 STDOUT-> STDIN을 통해 파이프를 통해 전달되지 않는 경우 명령은 이름으로 전달 된 파일을 통해 데이터를 수신 할 수 있습니다. 명령 줄 인수.
예
출력을 STDOUT으로 보냅니다.
$ cat file 1 2 3 4 5
는 STDOUT을 통해 파이프를 통해 grep
“의 STDIN으로 전송됩니다.
$ cat file | grep 5 5
파일을 명령 줄 인수로 처리합니다.
$ grep 5 file 5
STDIN을 통해 직접 파일 내용 처리
$ grep 5 < <(cat file) 5
여기 “file
의 콘텐츠가 위의 STDIN을 통해 grep
로 이동할 수 있음을 보여줍니다.
grep(1)
매뉴얼 페이지 (유형man grep
)에는 “grep [options] PATTERN [FILE …]”이 표시됩니다. “FILE”뒤에 “…”가오고 있다는 사실은 여러 파일 인수가있을 수 있음을 의미합니다. 대괄호 ([
…]
) 안에 있다는 사실은 파일 인수가 선택 사항임을 의미합니다 (즉, 무엇이든). 계속 읽으면“ Grep 가 명명 된 입력 파일 (또는 파일이 명명되지 않은 경우 표준 입력 또는 파일 이름-
주어진)….” 따라서 지정된 파일이 없으면 grep은 표준 입력을 검색합니다.