Linux에서 파이프 문자는 "|"로, 주로 둘 이상의 명령을 연결하고 하나의 명령의 출력을 다음 명령의 입력으로 사용하는 데 사용됩니다. 구문 "command1 | command2 [ | commandN. .. ]", "|" 문자 왼쪽에 있는 명령의 출력은 "|" 문자 오른쪽에 있는 명령의 입력으로 사용됩니다. 파이프 문자는 연속적으로 사용될 수 있습니다. 첫 번째 명령의 출력은 두 번째 명령의 입력으로 사용되고, 두 번째 명령의 출력은 세 번째 명령의 입력으로 사용됩니다.
이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.
Shell에는 두 개 이상의 명령(프로그램 또는 프로세스)을 함께 연결하고, 한 명령의 출력을 다음 명령의 입력으로 사용하는 기능도 있습니다. 이렇게 연결된 두 개 이상의 명령이 파이프를 형성합니다. .
Linux 파이프는 수직 막대|
를 사용하여 파이프 문자라고 하는 여러 명령을 연결합니다.
command1 | command2 command1 | command2 [ | commandN... ]
두 명령 사이에 파이프가 설정되면 파이프 기호 | 왼쪽 명령의 출력이 오른쪽 명령의 입력이 됩니다. 첫 번째 명령이 표준 출력에 쓰고 두 번째 명령이 표준 입력에서 읽는 한 두 명령은 파이프를 형성할 수 있습니다. 대부분의 Linux 명령을 사용하여 파이프를 형성할 수 있습니다.
파이프 문자는 연속적으로 사용될 수 있습니다. 첫 번째 명령의 출력은 두 번째 명령의 입력으로 사용되고, 두 번째 명령의 출력은 세 번째 명령의 입력으로 사용됩니다.
여기서 command1은 올바른 출력을 가져야 하며 command2는 command2의 출력 결과를 처리할 수 있어야 하며 command2는 command1의 올바른 출력 결과만 처리할 수 있지만 다음의 오류 메시지는 처리할 수 없다는 점에 유의해야 합니다. 명령1.
예: hello.sh 파일을 정렬하고 중복 제거 후 "better"가 포함된 줄을 찾습니다. 명령은 다음과 같습니다. cat hello.sh | sort | grep 'better'
텍스트 보기
Sort[root@linuxforliuhj test]# cat hello.sh hello this is linux be better be better i am lhj hello this is linux i am lhj i am lhj be better i am lhj have a nice day have a nice day hello this is linux hello this is linux have a nice day zzzzzzzzzzzzzz dddddddd gggggggggggggggggggg [root@linuxforliuhj test]#
【2】두 번째 프로세스 - 정렬
이전 cat 명령으로 출력된 결과가 파이프라인을 통해 sort 명령으로 전달되므로 sort 명령은 이전 cat 명령으로 출력된 텍스트를 정렬합니다
[root@linuxforliuhj test]# cat hello.sh | sort be better be better be better dddddddd gggggggggggggggggggg have a nice day have a nice day have a nice day hello this is linux hello this is linux hello this is linux hello this is linux i am lhj i am lhj i am lhj i am lhj zzzzzzzzzzzzzz [root@linuxforliuhj test]#
【3】 세 번째 프로세스 프로세스 - Deduplication
이전 uniq 소개 글에서 언급했듯이 sort는 uniq와 함께 사용하면 효과적으로 중복 제거가 가능하므로 sort별로 출력된 텍스트는 파이프라인을 통해 처리하기 위해 uniq로 보내지므로 uniq는 sorted를 처리합니다. text., 중복을 효과적으로 제거할 수 있습니다
[root@linuxforliuhj test]# cat hello.sh | sort | uniq be better dddddddd gggggggggggggggggggg have a nice day hello this is linux i am lhj zzzzzzzzzzzzzz [root@linuxforliuhj test]#
【4】네 번째 프로세스 - 필터링
필터링의 마지막 단계는 이전 명령인 uniq 명령
[root@linuxforliuhj test]# cat hello.sh | sort | uniq | grep 'better' be better [root@linuxforliuhj test]#
여기에 중요한 점이 있습니다!
여기에 중요한 점이 있습니다!
위의 cat, sort, uniq, grep 및 기타 명령은 모두 파이프 문자를 지원합니다. 표준 입력에서 처리됩니다(즉, rm, kill 및 기타 명령과 같은 일부 명령의 경우 표준 입력에서 매개변수 읽기를 지원하지 않고 명령줄에서 매개변수 읽기만 지원합니다). (즉, rm 명령 파일이나 디렉터리 뒤에 delete를 지정해야 하고, kill 명령 뒤에 kill할 프로세스 번호를 지정해야 하는 등)
그러면 어떤 명령이 파이프를 지원하는지, 어떤 명령이 있는지 파이프를 지원하지 않습니까?
일반적으로 sort, uniq, grep, awk, sed 등과 같이 텍스트를 처리하는 명령은 모두 파이프를 지원하고, rm 및 ls와 같이 텍스트를 처리하지 않는 명령은 파이프를 지원하지 않습니다.
표준 입력 매개변수와 명령줄 매개변수 중 무엇이 우선합니까?[root@linuxforliuhj test]# cat hello.sh | sort be better be better be better dddddddd gggggggggggggggggggg have a nice day have a nice day have a nice day hello this is linux hello this is linux hello this is linux hello this is linux i am lhj i am lhj i am lhj i am lhj zzzzzzzzzzzzzz [root@linuxforliuhj test]#로그인 후 복사로그인 후 복사있습니다. sort 이후에 매개변수가 없으면 파이프 문자에 의해 던져진 이전 명령의 출력이 처리됩니다(즉, 이전 명령의 표준 출력이 이 명령의 표준 입력으로 사용됩니다)
파일이 rm 후에 삭제가 지정되지 않으면 오류가 보고됩니다. 매개변수가 손실되므로 rm과 같은 명령은 표준 입력에서 매개변수 읽기를 지원하지 않습니다. 이는 명령줄에서 매개변수 지정, 즉 삭제할 파일 지정만 지원합니다.[root@linuxforliuhj test]# ls beifen.txt hello.sh mk read.ln read.sh read.txt sub.sh [root@linuxforliuhj test]# ls | grep read.sh read.sh [root@linuxforliuhj test]# ls | grep read.sh | rm rm: missing operand Try 'rm --help' for more information. [root@linuxforliuhj test]#로그인 후 복사
[root@linuxforliuhj test]# cat a.txt aaaa dddd cccc bbbb [root@linuxforliuhj test]# cat b.txt 1111 3333 4444 2222 [root@linuxforliuhj test]#
[root@linuxforliuhj test]# cat a.txt | sort aaaa bbbb cccc dddd [root@linuxforliuhj test]#
sort의 명령줄 매개변수가 비어 있으면 이전 명령의 출력이 이 명령의 입력으로 사용됩니다. 기본적으로
실행 명령: cat a.txt | sort b.txt
[root@linuxforliuhj test]# cat a.txt | sort b.txt 1111 2222 3333 4444 [root@linuxforliuhj test]#
sort의 명령줄 매개변수(여기서는 b.txt)가 비어 있지 않으면 sort가 표준 입력의 매개변수를 읽지 않는다는 것을 알 수 있습니다. , 그리고 명령줄 매개변수를 읽을 때
명령을 실행합니다: cat a.txt | sort b.txt -
[root@linuxforliuhj test]# cat a.txt | sort b.txt - 1111 2222 3333 4444 aaaa bbbb cccc dddd [root@linuxforliuhj test]#
" - "표준 입력, 즉 cat a.txt 명령의 출력을 나타냅니다. b.txt 파일과 표준 입력을 함께 사용하는 것과 같습니다. 정렬은 a.txt b.txt를 정렬하는 것과 같습니다
[root@linuxforliuhj test]# sort a.txt b.txt 1111 2222 3333 4444 aaaa bbbb cccc dddd [root@linuxforliuhj test]#
思考:对于rm、kill等命令,我们写脚本时常常会遇到需要查询某个进程的进程号然后杀掉该进程,查找某个文件然后删除它这样的需求,该怎么办呢?那就用xargs吧!
相关推荐:《Linux视频教程》
위 내용은 리눅스의 파이프 문자는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!