
리눅스 grep command는 여러 파일에서 일치하는 줄을 표시하는 문자열 및 패턴 일치 유틸리티입니다. 다른 명령의 파이프 출력과도 작동합니다. 우리는 당신에게 방법을 보여줍니다.
grep의 비하인드 스토리
그만큼 grep 명령은 세 가지 이유로 Linux 및 Unix 서클에서 유명합니다. 첫째, 매우 유용합니다. 둘째, 다양한 옵션이 압도적 일 수 있습니다. 셋째, 특정 요구를 충족시키기 위해 밤새 작성되었습니다. 처음 두 개는 시작되었습니다. 세 번째는 약간 꺼져 있습니다.
켄 톰슨은 정규식 검색 기능을 ed 편집자 (ee-dee로 발음)는 텍스트 파일을 검색하기 위해 자신의 용도로 작은 프로그램을 만들었습니다. Doug Mcilroy, Bell Labs의 부서장은 Thompson에게 다가 가서 동료 중 한 명인 Lee McMahon이 직면 한 문제를 설명했습니다.
맥 마혼은 텍스트 분석을 통해 연방 정부 논문의 저자를 밝히려고 노력했다. 그는 텍스트 파일 내에서 구와 문자열을 검색 할 수있는 도구가 필요했습니다. 톰슨은 그날 저녁 약 1 시간 동안 다른 사람이 사용할 수있는 도구를 일반 유틸리티로 만들었습니다. grep. 그는 그 이름을 ed 명령 문자열 g/re/p “글로벌 정규식 검색”으로 번역됩니다.
톰슨이 브라이언 케르 니건에게 grep.
grep을 사용한 간단한 검색
파일 내에서 문자열을 검색하려면 명령 줄에서 검색어와 파일 이름을 전달하십시오.
일치하는 줄이 표시됩니다. 이 경우 한 줄입니다. 일치하는 텍스트가 강조 표시됩니다. 대부분의 배포판에서 grep 별명은 다음과 같습니다.
alias grep='grep --colour=auto'
일치하는 여러 줄이있는 결과를 살펴 보겠습니다. 애플리케이션 로그 파일에서 “평균”이라는 단어를 찾습니다. 로그 파일에서 단어가 소문자인지 여부를 기억할 수 없으므로 -i (무시) 옵션 :
grep -i Average geek-1.log

모든 일치하는 줄이 표시되고 일치하는 텍스트가 각각 강조 표시됩니다.

-v (invert match) 옵션을 사용하여 일치하지 않는 행을 표시 할 수 있습니다.
grep -v Mem geek-1.log

일치하지 않는 행이므로 강조 표시가 없습니다.

우리는 원인이 될 수 있습니다 grep 완전히 침묵합니다. 결과는에서 반환 값으로 쉘에 전달됩니다. grep. 0의 결과는 문자열을 의미합니다 였다 발견 한 결과는 그것을 의미 아니였다 녹이다. 다음을 사용하여 리턴 코드를 확인할 수 있습니다 $? 특수 매개 변수 :
grep -q average geek-1.log
echo $?
grep -q howtogeek geek-1.log
echo $?

grep을 사용한 재귀 적 검색
중첩 된 디렉토리 및 서브 디렉토리를 검색하려면 -r (재귀) 옵션을 사용하십시오. 명령 행에 파일 이름을 제공하지 않고 경로를 제공해야합니다. 현재 디렉토리 “.”에서 검색 중입니다. 하위 디렉토리 :
grep -r -i memfree .

출력에는 일치하는 각 줄의 디렉토리와 파일 이름이 포함됩니다.

우리는 만들 수 있습니다 grep 를 사용하여 기호 링크를 따르십시오 -R (재귀 역 참조) 옵션. 이 디렉토리에는 다음과 같은 심볼릭 링크가 있습니다. logs-folder. 그것은 지적 /home/dave/logs.
ls -l logs-folder

마지막 검색을 -R (재귀 역 참조) 옵션 :
grep -R -i memfree .

심볼릭 링크가 뒤 따르고이를 가리키는 디렉토리가 검색됩니다. grep 너무.

전체 단어 검색
기본적으로, grep 검색 대상이 다른 문자열 내부를 포함하여 해당 행의 아무 곳에 나 표시되면 행과 일치합니다. 이 예를보십시오. 우리는“무료”라는 단어를 검색 할 것입니다.
grep -i free geek-1.log

결과는 문자열이 “free”인 행이지만 별도의 단어는 아닙니다. 그들은 “MemFree”라는 문자열의 일부입니다.

강제로 grep 별도의 “단어”만 일치 시키려면 -w (단어 regexp) 옵션.
grep -w -i free geek-1.log
echo $?

이번에는 검색어 “무료”가 별도의 단어로 파일에 나타나지 않기 때문에 결과가 없습니다.
여러 검색어 사용
그만큼 -E (확장 정규식) 옵션을 사용하면 여러 단어를 검색 할 수 있습니다. (그만큼 -E 더 이상 사용되지 않는 옵션 egrep 의 버전 grep.)
이 명령은 “평균”및 “memfree”라는 두 가지 검색어를 검색합니다.
grep -E -w -i "average|memfree" geek-1.log

각 검색어에 대해 일치하는 모든 줄이 표시됩니다.

전체 단어 일 필요는 없지만 여러 단어를 검색 할 수도 있지만 전체 단어 일 수도 있습니다.
그만큼 -e (패턴) 옵션을 사용하면 명령 줄에서 여러 검색어를 사용할 수 있습니다. 검색 패턴을 만들기 위해 정규식 대괄호 기능을 사용하고 있습니다. 그것은 말한다 grep 대괄호 “()”안에 포함 된 문자 중 하나와 일치합니다. 이것은 의미 grep 검색시 “kB”또는 “KB”와 일치합니다.

두 문자열이 일치하며 실제로 일부 줄에는 두 문자열이 포함됩니다.
정확하게 일치하는 라인
그만큼 -x (라인 정규식)은 전체 라인 검색어와 일치합니다. 로그 파일에 한 번만 나타나는 날짜 및 시간 스탬프를 검색해 보겠습니다.
grep -x "20-Jan--06 15:24:35" geek-1.log

일치하는 한 줄을 찾아서 표시합니다.
그 반대는 하지마 시합. 구성 파일을 볼 때 유용 할 수 있습니다. 댓글은 훌륭하지만 때로는 실제 설정을 찾기가 어렵습니다. 여기에 /etc/sudoers 파일:

다음과 같이 주석 행을 효과적으로 필터링 할 수 있습니다.
sudo grep -v "#" /etc/sudoers

파싱하기가 훨씬 쉽습니다.
일치하는 텍스트 만 표시
일치하는 전체 줄을 보지 않고 일치하는 텍스트 만 보려는 경우가 있습니다. 그만큼 -o (일치하는 것만) 옵션이 그렇게합니다.
grep -o MemFree geek-1.log

전체 일치하는 줄 대신 검색어와 일치하는 텍스트 만 표시하도록 표시가 줄어 듭니다.

grep으로 계산
grep 텍스트에 관한 것이 아니라 수치 정보도 제공 할 수 있습니다. 우리는 만들 수 있습니다 grep 다른 방식으로 우리를 위해 계산하십시오. 검색 용어가 파일에 몇 번 나타나는지 알고 싶다면 -c (카운트) 옵션.
grep -c average geek-1.log

grep 검색어가이 파일에 240 회 나타납니다.
당신은 할 수 있습니다 grep 를 사용하여 일치하는 각 줄의 줄 번호를 표시합니다. -n (행 번호) 옵션.
grep -n Jan geek-1.log

일치하는 각 줄의 줄 번호는 줄의 시작 부분에 표시됩니다.

표시되는 결과 수를 줄이려면 -m (최대 개수) 옵션. 출력을 5 개의 일치하는 줄로 제한합니다.
grep -m5 -n Jan geek-1.log

컨텍스트 추가
각 일치하는 줄에 대해 추가 줄 (일치하지 않는 줄)을 볼 수있는 것이 종종 유용합니다. 일치하는 라인 중 관심있는 라인을 구별하는 데 도움이됩니다.
일치하는 행 뒤에 일부 행을 표시하려면 -A (컨텍스트 후) 옵션을 사용하십시오. 이 예에서는 세 줄을 요청합니다.
grep -A 3 -x "20-Jan-06 15:24:35" geek-1.log

일치하는 줄 앞의 일부 줄을 보려면 -B (컨텍스트 앞) 옵션.
grep -B 3 -x "20-Jan-06 15:24:35" geek-1.log

일치하는 줄 전후에 줄을 포함하려면 -C (컨텍스트) 옵션.
grep -C 3 -x "20-Jan-06 15:24:35" geek-1.log

일치하는 파일 표시
검색어가 포함 된 파일 이름을 보려면 -l (일치하는 파일) 옵션. 어떤 C 소스 코드 파일에 대한 참조가 포함되어 있는지 확인하려면 sl.h 헤더 파일에서 다음 명령을 사용하십시오.
grep -l "sl.h" *.c

일치하는 줄이 아닌 파일 이름이 나열됩니다.

물론 검색어가 포함되지 않은 파일도 찾을 수 있습니다. 그만큼 -L (일치하지 않는 파일) 옵션은 바로 그렇게합니다.
grep -L "sl.h" *.c

줄의 시작과 끝
우리는 강제로 할 수있다 grep 줄의 시작 또는 끝에있는 일치 항목 만 표시합니다. “^”정규식 연산자는 줄의 시작과 일치합니다. 실제로 로그 파일의 모든 줄에는 공백이 포함되지만 첫 문자로 공백이있는 줄을 검색합니다.
grep "^ " geek-1.log

줄의 시작 부분에 첫 문자로 공백이있는 줄이 표시됩니다.

줄의 끝과 일치 시키려면“$”정규 표현식 연산자를 사용하십시오. “00”으로 끝나는 줄을 검색 할 것입니다.
grep "00$" geek-1.log

디스플레이에 최종 문자로 “00”이있는 행이 표시됩니다.

grep과 함께 파이프 사용
물론 입력을 파이프로 연결할 수 있습니다. grep , 출력을 파이프 grep 다른 프로그램으로 grep 파이프 체인의 중앙에 자리 잡고 있습니다.
C 소스 코드 파일에서 문자열“ExtractParameters”의 모든 항목을보고 싶다고 가정 해 봅시다. 우리는 꽤 많은 것들이있을 것이라는 것을 알고 있습니다. less:
grep "ExtractParameters" *.c | less

출력은 less.

이를 통해 파일 목록을 살펴보고 사용할 수 있습니다. less's 검색 시설.
출력을 파이프하면 grep 으로 wc 사용 -l (줄) 옵션을 사용하면 “ExtractParameters”가 포함 된 소스 코드 파일의 줄 수를 계산할 수 있습니다. (우리는 grep -c (카운트) 옵션이지만이 방법으로 배관을 시연 할 수있는 깔끔한 방법입니다 grep.)
grep "ExtractParameters" *.c | wc -l

다음 명령으로 출력을 파이핑합니다. ls 으로 grep 출력을 파이핑 grep 으로 sort . 현재 디렉토리에 파일을 나열하고 문자열이 “Aug”인 파일을 선택하고 파일 크기별로 정렬합니다.
ls -l | grep "Aug" | sort +4n

세분화 해 봅시다 :
-
ls -l: 다음을 사용하여 파일의 긴 형식 목록을 수행하십시오.
ls. -
grep“8 월”:에서 라인을 선택하십시오
ls그들에 “Aug”가있는 목록. 이름에 “Aug”가있는 파일도 찾을 수 있습니다. - + 4n 정렬: 네 번째 열 (파일 크기)에서 grep의 출력을 정렬합니다.
파일 크기의 오름차순으로 8 월 (연도에 관계없이)에 수정 된 모든 파일의 정렬 된 목록을 얻습니다.
관련 : Linux에서 파이프를 사용하는 방법
grep : 더 적은 명령, 더 많은 동맹국
grep 당신의 처분에 가지고 훌륭한 도구입니다. 그것은 1974 년에 시작되었으며 우리가하는 일이 필요하기 때문에 여전히 강세를 보이고 있습니다.
커플 링 grep 정규 표현식을 사용하면 실제로 다음 단계로 넘어갑니다.
관련 : 기본 정규 표현식을 사용하여 더 잘 검색하고 시간을 절약하는 방법










