명령어의 결과를 체인 형태로 연결하여 더 복잡한 작업을 수행할 수 있게 해주는 기능이다.
command1 | command2 | command3 | ...
command1 | command2
예를 들어, 위와 같이 연결되어 있으면 command1의 출력이 command2의 입력이 된다.
$ ls -al | grep hello
-rwxrwxrwx 1 kim kim 25 Dec 7 14:30 hello.txt
위 명령의 경우, 리스트를 상세 출력한 결과를 grep에 전달한다. grep은 전달받은 데이터에서 hello가 들어있는 행을 출력한다.
다음 명령어들은 파이프라인과 종종 같이 사용되는 명령어들이다.
주어진 텍스트에서 패턴이 일치하는 행을 출력하는 명령어이다. 라인 단위로 출력하기 때문에 라인에서 일부 데이터를 추출하려면 추가 가공이 필요하다.
grep [option] pattern argument
$ ls -al | grep hello
-rwxrwxrwx 1 kim kim 25 Dec 7 14:30 hello.txt
패턴에는 정규표현식 사용이 가능하다.
파일명이나 텍스트가 들어간다.
*.txt처럼 와일드카드를 사용해서 특정 확장자를 가진 파일들만 탐색하는 것도 가능하다.
텍스트의 특정 레코드를 가공해서 출력하는 명령어이다.
awk [option] 'pattern { action }' argument
awk는 텍스트를 행(레코드) 단위로 인식한다. 각 레코드에 있는 텍스트들은 공백 문자로 구분된 필드들로 분류된다.

$ ls -al | grep hello | awk '{print $9}'
hello.txt
$ ls -al | awk '/hello/{print $9}'
hello.txt
위 두 명령어는 모두 ls 명령어를 통해 주어진 입력에서 hello가 들어간 행(레코드)을 고른 후 9번째 필드를 출력하는 명령어이다.
정규표현식은 /pattern/ 형태로 사용할 수 있다.
패턴에는 C언어와 유사한 구조의 코드를 넣는것도 가능하다.
awk 'if (<condition>) <statement>; {print $0}'
명령어 + argument의 구조로 되어 있으며, 각 필드는 $1, $2, …처럼 표현한다.
임의의 문자를 출력하고 싶으면 쌍따옴표를 사용하면 된다.
$ ls -al | awk '/hello/{print"filename : "$9}'
filename : hello.txt
생략이 가능하며, 생략시 기본 액션인 print가 실행된다.
ls -al | awk '/hello/'
파일명이나 텍스트가 들어간다.
명령어의 인자(argument)를 동적으로 생성하여 전달하는 명령어이다.
command | xargs [options] [command]
$ ls -al | awk '/hello/{print $9}' | xargs cat # 결과적으로 cat hello.txt와 같다.
Hello World
Apple Banana
위 명령은 두번째 파이프라인에서 hello.txt를 전달받아서 cat 명령어로 실행하는 명령이다.
-t : 실행되기 전 실행할 커맨드를 출력한다.$ ls -al | awk '/hello/{print $9}' | xargs -t cat
cat hello.txt
Hello World
Apple Banana-p : 실행되기전 실행여부를 확인하도록 한다.$ ls -al | awk '/hello/{print $9}' | xargs -p cat
cat hello.txt ?...y
Hello World
Apple Banana