Unix / Linux-파이프 및 필터
이 장에서는 Unix의 파이프와 필터에 대해 자세히 설명합니다. 한 프로그램의 출력이 다음 프로그램의 입력이되도록 두 명령을 함께 연결할 수 있습니다. 이러한 방식으로 연결된 두 개 이상의 명령이 파이프를 형성합니다.
파이프를 만들려면 수직 막대 (|) 두 명령 사이의 명령 줄에서.
프로그램이 다른 프로그램에서 입력을 받으면 해당 입력에 대해 일부 작업을 수행하고 결과를 표준 출력에 기록합니다. 그것은filter.
grep 명령
grep 명령은 파일에서 특정 패턴이있는 행을 검색합니다. 구문은-
$grep pattern file(s)
이름 "grep" ed (유닉스 라인 편집기) 명령에서 나옴 g/re/p 이는 "정규 표현식을 전체적으로 검색하고이를 포함하는 모든 행을 인쇄"를 의미합니다.
정규식은 일반 텍스트 (예 : 단어) 및 / 또는 패턴 일치에 사용되는 특수 문자입니다.
grep의 가장 간단한 사용은 단일 단어로 구성된 패턴을 찾는 것입니다. 주어진 문자열을 포함하는 입력 파일의 행만 표준 출력으로 전송되도록 파이프에서 사용할 수 있습니다. grep에 읽을 파일 이름을 지정하지 않으면 표준 입력을 읽습니다. 이것이 모든 필터 프로그램이 작동하는 방식입니다.
$ls -l | grep "Aug"
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
함께 사용할 수있는 다양한 옵션이 있습니다. grep 명령-
Sr. 아니. | 옵션 및 설명 |
---|---|
1 | -v 패턴과 일치하지 않는 모든 행을 인쇄합니다. |
2 | -n 일치하는 줄과 줄 번호를 인쇄합니다. |
삼 | -l 일치하는 행 (문자 "l")이있는 파일 이름 만 인쇄합니다. |
4 | -c 일치하는 줄 수만 인쇄합니다. |
5 | -i 대문자 또는 소문자와 일치합니다. |
이제 grep에게 다음과 같은 줄을 찾도록 지시하는 정규식을 사용하겠습니다. "carol", 0 또는 정규식에서 ". *"로 축약 된 기타 문자) 다음에 "Aug"가옵니다 .−
여기에서 우리는 -i 대소 문자를 구분하지 않는 검색 옵션-
$ls -l | grep -i "carol.*aug"
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
정렬 명령
그만큼 sort명령은 텍스트 줄을 알파벳 또는 숫자로 정렬합니다. 다음 예제는 음식 파일의 줄을 정렬합니다.
$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
그만큼 sort명령은 기본적으로 텍스트 줄을 알파벳순으로 정렬합니다. 정렬을 제어하는 많은 옵션이 있습니다-
Sr. 아니. | 기술 |
---|---|
1 | -n 숫자로 정렬 (예 : 10은 2 이후 정렬), 공백 및 탭은 무시합니다. |
2 | -r 정렬 순서를 반대로합니다. |
삼 | -f 대문자와 소문자를 함께 정렬합니다. |
4 | +x 먼저 무시 x 정렬 할 때 필드. |
두 개 이상의 명령이 파이프에 연결될 수 있습니다. 이전 파이프 예제를 사용하여grep, 8 월에 수정 된 파일을 크기 순으로 추가 정렬 할 수 있습니다.
다음 파이프는 명령으로 구성됩니다. ls, grep, 및 sort −
$ls -l | grep "Aug" | sort +4n
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
$
이 파이프는 8 월에 수정 된 모든 파일을 크기 순으로 정렬하여 터미널 화면에 인쇄합니다. 정렬 옵션 + 4n은 4 개의 필드 (필드는 공백으로 구분됨)를 건너 뛰고 숫자 순서로 행을 정렬합니다.
pg 및 기타 명령
긴 출력은 일반적으로 화면에서 압축 할 수 있지만 텍스트를 더 많이 실행하거나 pg필터로서의 명령; 화면이 텍스트로 가득 차면 디스플레이가 중지됩니다.
긴 디렉토리 목록이 있다고 가정 해 봅시다. 정렬 된 목록을 더 쉽게 읽을 수 있도록 출력을 다음을 통해 파이프하십시오.more 다음과 같이-
$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 14827 Aug 9 12:40 ch03
.
.
.
-rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05
--More--(74%)
화면이 파일 크기 순서에 따라 정렬 된 줄로 구성된 텍스트로 가득 차면 화면이 채워집니다. 화면 하단에는more 프롬프트에서 정렬 된 텍스트를 이동하는 명령을 입력 할 수 있습니다.
이 화면을 완료하면 추가 프로그램에 대한 설명에 나열된 명령을 사용할 수 있습니다.