Linux의 grep 및 파이프 이해

Linux의 grep 및 파이프 이해

나는 우연히 만났다이것내 문제를 설명하는 게시물. file.txt"foo World"를 포함하는 파일이 있다고 가정합니다 .
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파일의 내용이며, 이는 ? foo World의 ​​입력이 됩니다 . grep나 맞아? 그렇다면 grep파일 경로가 문자열로 필요하다고 생각했습니까?

답변1

대부분의 명령은 입력을 위해 열어야 하는 파일이거나 STDIN을 통해 명령에 전달되는 데이터 스트림인 입력을 처리할 수 있습니다.

의 내용이 cat file.txt파이프( |)를 통해 다른 명령으로 전송되면 왼쪽 파이프로 전달되는 STDOUT을 통한 출력이 설정되어 파이프의 STDIN 오른쪽에 있는 명령에 공급됩니다.

내용이 파이프를 통해 STDOUT -> STDIN을 통해 전달되지 않는 경우 명령은 명령줄 인수를 통해 이름으로 전달된 파일을 열어 데이터를 수신할 수 있습니다.

출력을 STDOUT으로 보냅니다.

$ cat file 
1
2
3
4
5

의 출력은 STDOUT을 통해 파이프를 통해 의 STDIN cat file으로 전송됩니다 .grep

$ cat file | grep 5
5

파일을 명령줄 인수로 처리합니다.

$ grep 5 file 
5

STDIN을 통해 파일 내용을 직접 처리합니다.

$ grep 5 < <(cat file)
5

file여기서는 위의 STDIN을 통해 의 내용을 전달할 수 있음 을 보여줍니다 grep.

관련 정보