소개
Linux grep 명령은 입력을 필터링하는 방법으로 사용됩니다.
GREP는 Global Regular Expression Printer의 약자이므로 효과적으로 사용하려면 정규식에 대한 지식이 있어야합니다.
이 기사에서는 grep 명령을 이해하는 데 도움이되는 몇 가지 예제를 보여 드리겠습니다.
01 of 09
GREP를 사용하여 파일에서 문자열을 검색하는 방법
다음 어린이 책 제목이있는 책이라는 텍스트 파일이 있다고 가정 해보십시오.
- 로빈 후드
- 작은 빨간 승마 두건
- 피터 팬
- 금발의 미녀와 세 마리 곰들
- 백설 공주와 일곱 난장이
- 피노키오
- 모자에있는 고양이
- 3 마리의 작은 돼지
- 그루프로
- 찰리와 초콜릿 공장
제목에 "The"라는 단어가있는 모든 책을 찾으려면 다음 구문을 사용하십시오.
grep
다음 결과가 반환됩니다.
- 금발의 미녀와 세 마리 곰들
- 백설 공주와 일곱 난장이
- 모자에있는 고양이
- 3 마리의 작은 돼지
- 그루프로
- 찰리와 초콜릿 공장
각각의 경우에 "The"라는 단어가 강조 표시됩니다.
검색은 대소 문자를 구분하므로 제목 중 하나에 "The"대신 "the"가 있으면 검색 결과가 반환되지 않습니다.
대소 문자를 무시하려면 다음 스위치를 추가하면됩니다.
grep the books --ignore-case
다음과 같이 -i 스위치를 사용할 수도 있습니다.
grep -i the books
02 of 09
와일드 카드를 사용하여 파일에서 문자열 검색
grep 명령은 매우 강력합니다. 다양한 패턴 일치 기술을 사용하여 결과를 필터링 할 수 있습니다.
이 예제에서는 와일드 카드를 사용하여 파일에서 문자열을 검색하는 방법을 보여줍니다.
다음 스코틀랜드 장소 이름을 가진 장소라는 파일이 있다고 상상해보십시오.
aberdeen
수태
어둡게하다
뇌관
반전
뉴 버그
새로운 사슴
새로운 갤러웨이
글래스고
에든버러
이름에 인 버트가있는 모든 장소를 찾으려면 다음 구문을 사용하십시오.
grep inver * places
별표 (*) 와일드 카드는 0 또는 다수를 나타냅니다. 그러므로 당신이 반전이라고 부르는 곳이나 반전이라고 부르는 곳이 있다면 그 두 가지가 돌아올 것입니다.
사용할 수있는 또 다른 와일드 카드는 마침표 (.)입니다. 이 문자를 사용하여 하나의 문자와 일치시킬 수 있습니다.
grep inver.r 장소
위의 명령은 단일 기간으로 표시된 두 개의 r 사이에 와일드 카드가 하나만있을 수 있기 때문에 인 버리 리 (inverseurie) 및 반전 (inverary)이라고하는 장소를 찾지 만 무위 확자는 찾지 않습니다.
마침표 와일드 카드는 유용하지만 검색중인 텍스트의 일부로 문제가 발생할 수 있습니다.
예를 들어이 도메인 이름 목록보기
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
모든 about.com을 찾으려면 다음 구문을 사용하여 검색하면됩니다.
grep * about * domainnames
목록에 다음 이름이 포함되어 있으면 위의 명령이 실패합니다.
- everydaylinuxuser.com/about.html
그러므로 다음 구문을 시도해 볼 수 있습니다.
grep * about.com 도메인 이름
다음 이름의 도메인이 없으면 정상적으로 작동합니다.
aboutycom.com
about.com이라는 용어를 찾으려면 다음과 같이 점을 이스케이프 처리해야합니다.
grep * .com 도메인 이름에 대해
마지막 와일드 카드는 0 또는 1 문자를 나타내는 물음표입니다.
예 :
grep? ber placenames
위 명령은 aberdeen, aberystwyth 또는 심지어 berwick을 반환합니다.
03 of 09
grep을 사용하여 줄의 시작과 끝에서 문자열 검색
캐럿 (^) 및 달러 ($) 기호를 사용하면 행의 시작과 끝에서 패턴을 검색 할 수 있습니다.
다음 팀 이름을 가진 football이라는 파일이 있다고 상상해보십시오.
- 블랙 풀
- 리버풀
- 맨체스터시
- 레스터 시티
- 맨체스터 유나이티드
- 뉴캐슬 유나이티드
- FC 맨체스터 유나이티드
맨체스터에서 시작한 모든 팀을 찾으려면 다음 구문을 사용하십시오.
grep ^ 맨체스터 팀
위의 명령은 맨체스터 시티와 맨체스터 유나이티드를 반환하지만 맨체스터 유나이티드는 반환하지 않습니다.
또는 다음 구문을 사용하여 United으로 끝나는 모든 팀을 찾을 수도 있습니다.
grep United $ teams
위의 명령은 맨체스터 유나이티드와 뉴캐슬 유나이티드를 반환하지만 맨체스터 유나이티드는 반환하지 않습니다.
04 of 09
grep을 사용하여 일치하는 항목 수 계산하기
grep을 사용하여 패턴과 일치하는 실제 라인을 반환하고 싶지는 않지만 몇 개가 있는지 알고 싶으면 다음 구문을 사용할 수 있습니다.
grep -c 패턴 입력 파일
패턴이 두 번 일치하면 숫자 2가 반환됩니다.
09 년 5 월
grep을 사용하여 일치하지 않는 조건 모두 찾기
다음과 같이 나열된 국가의 지명 목록이 있다고 가정 해보십시오.
- aberdeen 스코틀랜드
- 글래스고 스코틀랜드
- 리버풀 잉글랜드
- 콜윈 베이
- 런던, 영국
colwyn bay에는 관련 국가가 없습니다.
국가가있는 모든 장소를 검색하려면 다음 구문을 사용할 수 있습니다.
grep land $ places
결과는 콜윈 베이를 제외한 모든 장소에서 반환됩니다.
이것은 분명히 육지로 끝나는 곳에서만 효과가 있습니다 (거의 과학적이지는 않습니다).
다음 구문을 사용하여 select를 반전시킬 수 있습니다.
grep -v land $ places
이것은 땅으로 끝나지 않은 모든 장소를 발견 할 것입니다.
06 년 6 월
grep을 사용하는 파일에서 빈 줄을 찾는 방법
타사 응용 프로그램에서 사용하는 입력 파일이 있다고 가정하고 다음과 같이 빈 줄을 찾으면 파일 읽기를 중지합니다.
- aberdeen 스코틀랜드
- 인 버니 스 스코틀랜드
- 리버풀 잉글랜드
- 콜윈 베이 웨일즈
응용 프로그램이 liverpool 후 줄에 도착하면 colwyn bay가 완전히 누락되었다는 의미를 읽지 않게됩니다.
grep을 사용하여 다음 구문으로 빈 줄을 검색 할 수 있습니다.
grep ^ $ places
불행히도 이것은 빈 줄만 반환하기 때문에 특히 유용하지 않습니다.
물론 파일이 다음과 같이 유효한지 확인하기 위해 빈 줄 수를 계산할 수 있습니다.
grep -c ^ $ places
그러나 빈 줄이있는 줄 번호를 알고 있으면이를 대체 할 수 있으므로 더 유용 할 것입니다. 다음 명령을 사용하여이를 수행 할 수 있습니다.
grep -n ^ $ places
07 09
grep을 사용하여 대문자 또는 소문자로 된 문자열을 검색하는 방법
grep을 사용하면 다음 구문을 사용하여 파일의 어떤 줄이 대문자인지 결정할 수 있습니다.
grep '[AZ]'파일 이름
대괄호 []는 문자의 범위를 결정하게합니다. 위의 예에서 A와 Z 사이에있는 모든 문자를 찾습니다.
따라서 소문자와 일치 시키려면 다음 구문을 사용할 수 있습니다.
grep '[az]'파일 이름
숫자 나 다른 기호가 아닌 문자 만 일치 시키려면 다음 구문을 사용할 수 있습니다.
grep '[a-zA-Z]'파일 이름
다음과 같이 숫자를 동일하게 처리 할 수 있습니다.
grep '[0-9]'파일 이름
08 년 9 월
grep을 사용하여 반복되는 패턴 찾기
중괄호 {}를 사용하여 반복 패턴을 검색 할 수 있습니다.
다음과 같이 전화 번호가 포함 된 파일이 있다고 가정 해보십시오.
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
숫자의 첫 번째 부분은 세 자리 여야하며이 패턴과 일치하지 않는 행을 찾고 싶습니다.
이전 예에서 [0-9]는 파일의 모든 숫자를 반환한다는 것을 알고 있습니다.
이 예에서는 세 개의 숫자와 하이픈 (-)으로 시작하는 줄을 원합니다. 다음 구문을 사용하여이를 수행 할 수 있습니다.
grep "^ [0-9] [0-9] [0-9] -"숫자
앞의 예제에서 알 수 있듯이 캐럿 (^)은 줄이 다음 패턴으로 시작해야 함을 의미합니다.
[0-9]는 0과 9 사이의 숫자를 검색합니다. 3 회 포함되어 3 개의 숫자와 일치합니다. 마지막으로 하이픈이 세 숫자를 따라야한다는 것을 나타내는 하이픈이 있습니다.
중괄호를 사용하면 다음과 같이 검색을 더 작게 만들 수 있습니다.
grep "^ [0-9] \ {3 \} -"숫자
슬래시는 {bracket}을 이스케이프 처리하여 정규 표현식의 일부로 작동하지만 본질적으로 [0-9] {3}은 0과 9 사이의 임의의 수를 세 번 의미합니다.
중괄호는 다음과 같이 사용할 수도 있습니다.
{5,10}
{5,}
{5,10}은 검색되는 문자가 적어도 5 회 이상 10 회 이상 반복되어야 함을 의미하지만 {5}는 문자가 적어도 5 회 반복되어야한다는 것을 의미하지만 그 이상이 될 수도 있습니다.
09 09
grep을 사용하여 다른 명령의 출력 사용
지금까지 개별 파일 내에서 패턴 일치를 살펴 봤지만 grep은 다른 명령의 출력을 패턴 일치를위한 입력으로 사용할 수 있습니다.
좋은 예는 활성 프로세스를 나열하는 ps 명령을 사용하는 것입니다.
예를 들어 다음 명령을 실행하십시오.
ps -ef
시스템에서 실행중인 모든 프로세스가 표시됩니다.
grep을 사용하여 다음과 같이 특정 실행중인 프로세스를 검색 할 수 있습니다.
ps -ef | grep firefox