정규 표현식과 함께 grep(및 egrep) 사용

Using Grep With Regular Expressions



이 튜토리얼에서는 두 가지를 모두 사용하는 방법을 설명합니다. 꽉 붙잡음 (그리고 에그렙) t o 정규 표현식과 결합된 단순한 형식의 파일에서 텍스트를 찾습니다. 그것은 여러 가지가 포함되어 있습니다 그리고 수업 과정 , 더 솔루션 , 뷰어가 완료됩니다.

이름 꽉 붙잡음 ed(및 vim) 명령 g/re/p에서 가져옵니다. 이는 주어진 정규식을 전역적으로 검색하고 출력을 인쇄(표시)한다는 의미입니다.







정기적 인 표현식

유틸리티를 통해 사용자는 정규 표현식( 정규 표현식 ). 정규식은 텍스트와 11개의 특수 문자 중 하나 이상으로 구성된 검색 문자열입니다. 간단한 예는 줄의 시작을 일치시키는 것입니다.



샘플 파일

의 기본 형태 꽉 붙잡음 특정 파일 또는 파일 내에서 간단한 텍스트를 찾는 데 사용할 수 있습니다. 예제를 시도하려면 먼저 샘플 파일을 만드십시오.



nano 또는 vim과 같은 편집기를 사용하여 아래 텍스트를 마이파일 .





xyz
xyzde
엑시즈드
덱시즈
d?gxyz
xxz
xzz
xz
x*z
xz
x z
XYZ
XYZ
xYz
xyyz
xyyz
쯧쯧

텍스트의 예제를 복사하여 붙여넣을 수 있지만(큰따옴표는 제대로 복사되지 않을 수 있음) 명령을 올바르게 배우려면 입력해야 합니다.

예제를 시도하기 전에 샘플 파일을 확인하세요.



$고양이마이파일

단순 검색

파일 내에서 'xyz' 텍스트를 찾으려면 다음을 실행하십시오.

$꽉 붙잡음xyz 마이파일

색상 사용

색상을 표시하려면 –color(이중 하이픈)를 사용하거나 간단히 별칭을 만듭니다. 예를 들어:

$꽉 붙잡음 --색상xyz 마이파일

또는

$별명 꽉 붙잡음= '꽉 붙잡음--색상'
$꽉 붙잡음xyz 마이파일

옵션

와 함께 사용되는 일반적인 옵션 꽉 붙잡음 명령에는 다음이 포함됩니다.

  • -나는 모든 라인을 찾는다 상관없이 케이스의
  • -씨 세다 텍스트가 포함된 줄 수
  • -n 디스플레이 라인 숫자 일치하는 라인의
  • -l 표시 전용 파일 이름 그 경기
  • -NS 재귀적 하위 디렉토리 검색
  • -v 모든 줄 찾기 아니다 텍스트를 포함하는

예를 들어:

$꽉 붙잡음 -NSxyz 마이파일# 대소문자에 상관없이 텍스트 찾기

$꽉 붙잡음 -icxyz 마이파일# 텍스트가 있는 줄 수

$꽉 붙잡음 -에xyz 마이파일# 줄 번호 표시

여러 파일 만들기

여러 파일을 검색하기 전에 먼저 새 파일을 여러 개 만듭니다.

$던졌다xyz>마이파일1
$던졌다 -그리고xyz xzz XYZ>마이파일2
$던졌다 -그리고xxx yyy>마이파일3
$고양이마이파일1
$고양이마이파일2
$고양이마이파일3

여러 파일 검색

파일 이름이나 와일드카드를 사용하여 여러 파일을 검색하려면 다음을 입력하십시오.

$꽉 붙잡음 -icxyz myfile myfile1 myfile2 myfile3
$꽉 붙잡음 -에xyz 내*
# 'my'로 시작하는 파일 이름과 일치

운동 I

  1. 먼저 /etc/passwd.conf 파일에 몇 줄이 있는지 세십시오.
힌트: 사용화장실 -NS //암호
  1. 이제 텍스트의 모든 항목을 찾으십시오. 어디 /etc/passwd 파일에서 .
  2. 파일에서 텍스트가 포함된 줄 수 찾기
  3. 텍스트를 포함하지 않는 줄 수 찾기 어디 .
  4. 에서 로그인 항목을 찾으십시오. /etc/passwd

운동 솔루션은 이 기사의 끝에서 찾을 수 있습니다.

정규식 사용

명령 꽉 붙잡음 검색을 구체화하기 위해 11개의 특수 문자 또는 기호 중 하나 이상을 사용하여 정규식과 함께 사용할 수도 있습니다. 정규식은 다음과 같은 유틸리티 내에서 패턴 일치를 허용하는 특수 문자를 포함하는 문자열입니다. 꽉 붙잡음 , 내가왔다 그리고 세드 . 문자열을 따옴표로 묶어야 할 수도 있습니다.

사용 가능한 특수 문자는 다음과 같습니다.

^^ 라인의 시작
$ 줄 끝
. 모든 문자( 개행 제외)
* 0개 이상의 이전 표현식
기호 앞에 오면 리터럴 문자가 됩니다.

없음을 포함하여 임의의 수의 문자와 일치시키기 위해 명령줄에서 사용할 수 있는 *는 다음과 같습니다. ~ 아니다 여기에서도 같은 방식으로 사용됩니다.

또한 다음 예에서 따옴표 사용에 유의하십시오.

^ 문자를 사용하여 텍스트로 시작하는 모든 줄을 찾으려면:

$꽉 붙잡음'^xyz' 마이파일

$ 문자를 사용하여 텍스트로 끝나는 모든 줄을 찾으려면:

$꽉 붙잡음'xyz$' 마이파일

^ 및 $ 문자를 모두 사용하여 문자열을 포함하는 행을 찾으려면:

$꽉 붙잡음'^xyz$' 마이파일

다음을 사용하여 라인을 찾으려면 . 모든 문자와 일치시키려면:

$꽉 붙잡음'^x.z' 마이파일

*를 사용하여 이전 표현식의 0개 이상과 일치하는 행을 찾으려면:

$꽉 붙잡음'^xy*z '마이파일

.*를 사용하여 0개 이상의 문자와 일치하는 행을 찾으려면:

$꽉 붙잡음'^X.*z '마이파일

다음을 사용하여 라인을 찾으려면 * 문자를 이스케이프하려면:

$꽉 붙잡음'^ X *z '마이파일

문자를 찾으려면 다음을 사용하십시오.

$꽉 붙잡음'\'마이파일

표현식 grep – egrep

NS 꽉 붙잡음 명령은 사용 가능한 정규식의 하위 집합만 지원합니다. 그러나 명령 에그렙:

  • 모든 정규식을 완전히 사용할 수 있습니다.
  • 둘 이상의 표현식을 동시에 검색할 수 있음

표현식은 한 쌍의 따옴표로 묶어야 합니다.

색상을 사용하려면 –color를 사용하거나 별칭을 다시 만듭니다.

$별명 이그렙='egrep --color'

하나 이상을 검색하려면 정규식 NS 이그렙 명령은 여러 줄에 걸쳐 쓸 수 있습니다. 그러나 다음과 같은 특수 문자를 사용하여 이 작업을 수행할 수도 있습니다.

| 교대, 둘 중 하나
(…) 표현식 일부의 논리적 그룹화
$이그렙 '(^루트|^uucp|^메일)' //암호

이것은 파일에서 root, uucp 또는 mail로 시작하는 줄을 추출합니다. 옵션 중 하나를 의미하는 기호.

다음 명령은 ~ 아니다 작동하지만 메시지가 표시되지는 않습니다. 꽉 붙잡음 명령은 모든 정규식을 지원하지 않습니다.

$꽉 붙잡음 '(^루트|^uucp|^메일)' //암호

그러나 대부분의 Linux 시스템에서 명령 그렙 -E 을 사용하는 것과 동일합니다. 이그렙 :

$꽉 붙잡음 -그리고 '(^루트|^uucp|^메일)' //암호

필터 사용

한 명령의 출력을 다른 명령의 입력으로 보내는 프로세스이며 사용 가능한 가장 강력한 Linux 도구 중 하나입니다.

파이프라인에 나타나는 명령은 수정된 스트림을 표준 출력으로 보내기 전에 전달된 입력을 검토하거나 수정하기 때문에 종종 필터라고 합니다.

다음 예에서 표준 출력은 ls -l 표준 입력으로 전달됩니다. 꽉 붙잡음 명령. 에서 출력 꽉 붙잡음 그런 다음 명령이 입력으로 전달됩니다. 명령.

이것은 디렉토리 만 표시합니다 /등 :

$ -NS /|꽉 붙잡음'^d'|

다음 명령은 필터 사용의 예입니다.

$추신 -ef|꽉 붙잡음크론

$WHO|꽉 붙잡음kdm

샘플 파일

복습을 시도하려면 먼저 다음 샘플 파일을 만드십시오.

nano 또는 vim과 같은 편집기를 사용하여 아래 텍스트를 사람들:

개인 J.Smith 25000
개인용 E.Smith 25400
교육 A.Brown 27500
교육 C.Brown 23400
(관리자) 알브론 30500
Goodsout T.Smyth 30000
개인 F.Jones 25000
교육* C.Evans 25500
Goodsout W.Pope 30400
지상층 T.Smythe 30500
개인 J.Maler 33000

연습 II

  1. 파일 표시 사람들 그리고 그 내용을 검토한다.
  2. 문자열을 포함하는 모든 줄 찾기 스미스 people.Hint 파일에서 grep 명령을 사용하지만 기본적으로 대소문자를 구분한다는 점을 기억하십시오.
  3. 문자열로 시작하는 모든 행을 포함하는 새 파일 npeople을 만듭니다. 개인의 people 파일에서.힌트: >와 함께 grep 명령을 사용합니다.
  4. 파일을 나열하여 npeople 파일의 내용을 확인합니다.
  5. 이제 텍스트가 문자열로 끝나는 모든 줄을 추가하십시오. 500 people 파일에서 npeople.Hint 파일로 이동: >>와 함께 grep 명령을 사용합니다.
  6. 다시, 파일을 나열하여 npeople 파일의 내용을 확인합니다.
  7. 파일에 저장된 서버의 IP 주소 찾기 /etc/hosts .힌트: $(hostname)과 함께 grep 명령을 사용하십시오.
  8. 사용하다 이그렙 에서 추출 /etc/passwd 다음을 포함하는 파일 계정 라인 lp 또는 자신의 사용자 아이디 .

운동 솔루션은 이 기사의 끝에서 찾을 수 있습니다.

더 많은 정규식

정규식은 스테로이드의 와일드카드로 생각할 수 있습니다.

특별한 의미를 가진 11개의 문자가 있습니다: 여는 대괄호 [ ], 백슬래시 , 캐럿 ^, 달러 기호 $, 마침표 또는 점 ., 세로 막대 또는 파이프 기호 |, 물음표 ?, 별표 또는 별표 *, 더하기 기호 + 및 여는 대괄호 { }. 이러한 특수 문자는 종종 메타 문자라고도 합니다.

다음은 전체 특수 문자 집합입니다.

^^ 라인의 시작
$ 줄 끝
. 모든 문자( 개행 제외)
* 0개 이상의 이전 표현식
| 교대, 둘 중 하나
[…] 일치시킬 명시적 문자 집합
+ 1개 이상의 이전 표현
? 이전 표현식의 0 또는 1
기호 앞에 오면 리터럴 문자가 됩니다.
{…} 명시적 수량자 표기법
(…) 표현식 일부의 논리적 그룹화

의 기본 버전 꽉 붙잡음 제한된 정규식 지원만 있습니다. 다음 예제가 모두 작동하려면 다음을 사용하십시오. 이그렙 대신 또는 그렙 -E .

다음을 사용하여 라인을 찾으려면 | 두 표현식 중 하나와 일치시키려면:

$이그렙'xxz|xzz' 마이파일

다음을 사용하여 행을 찾으려면 | 문자열 내에서 두 표현식을 일치시키려면 ( )도 사용하십시오:

$이그렙'^ 엑스(Yz|yz)' 마이파일

[ ]를 사용하여 임의의 문자와 일치하는 행을 찾으려면:

$이그렙'^ 엑스[]z '마이파일

[ ]를 사용하여 어떤 문자와도 일치하지 않는 행을 찾으려면:

$이그렙'^ 엑스[^ 예]z '마이파일

*를 사용하여 이전 표현식의 0개 이상과 일치하는 행을 찾으려면:

$이그렙'^xy*z '마이파일

+를 사용하여 이전 표현식 중 하나 이상과 일치하는 행을 찾으려면:

$이그렙'^xy+z' 마이파일

를 사용하여 행을 찾으려면 ? 이전 표현식의 0 또는 1과 일치시키려면:

$이그렙'^xy?z' 마이파일

연습 III

  1. 이름을 포함하는 모든 줄 찾기 에반스 또는 화가 파일 사람들.
  2. 이름을 포함하는 모든 줄 찾기 스미스, 스미스 또는 스마이스 파일 사람들.
  3. 이름을 포함하는 모든 줄 찾기 브라운, 브라운 또는 원천 사람 파일에 있습니다. 시간이 있다면:
  4. 문자열이 포함된 줄 찾기 (관리자), 대괄호를 포함하여 파일 people.
  5. people 파일에서 * 문자가 포함된 행을 찾으십시오.
  6. 위의 5와 6을 결합하여 두 표현식을 모두 찾으십시오.

더 많은 예

다음을 사용하여 선을 찾으려면 . 및 *는 모든 문자 집합과 일치합니다.

$이그렙'^xy.*z '마이파일

{ }를 사용하여 N개의 문자와 일치하는 행을 찾으려면:

$이그렙'^xy{}z '마이파일
$이그렙'^xy{4}z '마이파일

{ }를 사용하여 N번 이상 일치하는 행을 찾으려면:

$이그렙'^xy{,}z '마이파일

{ }를 사용하여 N번 일치하지만 M번 이하로 일치하는 행을 찾으려면:

$이그렙'^xy{2,}z '마이파일

결론

이 튜토리얼에서 우리는 먼저 꽉 붙잡음 파일 또는 여러 파일에서 텍스트를 찾는 간단한 형식입니다. 그런 다음 검색할 텍스트를 간단한 정규식과 결합한 다음 다음을 사용하여 더 복잡한 정규식을 결합했습니다. 이그렙 .

다음 단계

여기서 얻은 지식을 잘 활용하시길 바랍니다. 시험해보십시오 꽉 붙잡음 자신의 데이터에 대한 명령을 기억하고 여기에 설명된 정규식은 다음과 같은 형식으로 사용할 수 있습니다. 우리 , 세드 그리고 어이쿠 !

운동 솔루션

운동 I

먼저 파일에 몇 줄이 있는지 계산하십시오. /etc/passwd .
$ wc -l /etc/passwd
이제 텍스트의 모든 항목을 찾으십시오. 어디 /etc/passwd.conf 파일에서
$ grep var /etc/passwd
파일에서 텍스트가 포함된 줄 수 찾기 어디

꽉 붙잡음 -씨어디//암호

텍스트를 포함하지 않는 줄 수 찾기 어디 .

꽉 붙잡음 -이력서어디//암호

에서 로그인 항목을 찾으십시오. /etc/passwd 파일
grep kdm /etc/passwd

연습 II

파일 표시 사람들 그리고 그 내용을 검토한다.
$ cat people
문자열을 포함하는 모든 줄 찾기 스미스 파일에서 사람들 .
$ grep 'Smith' people
새 파일을 만들고, 엔피플 , 문자열로 시작하는 모든 행 포함 개인의 에서 사람들 파일
$ grep '^Personal' people> npeople
파일 내용 확인 엔피플 파일을 나열하여.
$ cat npeople
이제 텍스트가 문자열로 끝나는 모든 줄을 추가하십시오. 500 파일에서 사람들 파일에 엔피플 .
$ grep '500$' people>>npeople
다시, 파일의 내용을 확인 엔피플 파일을 나열하여.
$ cat npeople
파일에 저장된 서버의 IP 주소 찾기 /etc/hosts .
$ grep $(hostname) /etc/hosts
사용하다 이그렙 에서 추출 /etc/passwd 다음을 포함하는 파일 계정 라인 lp 또는 자신의 사용자 ID.
$ egrep '(lp|kdm:)' /etc/passwd

연습 III

이름을 포함하는 모든 줄 찾기 에반스 또는 화가 파일에서 사람들 .
$ egrep 'Evans|Maler' people
이름을 포함하는 모든 줄 찾기 스미스 , 스미스 또는 스마이스 파일에서 사람들 .
$ egrep 'Sm(i|y)the?' people
이름을 포함하는 모든 줄 찾기 갈색 , 브라우엔 또는 원천 파일 사람들.
$ egrep 'Brow?e?n' people
문자열이 포함된 줄 찾기 (관리자), 대괄호를 포함하여 파일에 사람들 .

$이그렙 '(관리자)'사람들

문자가 포함된 행 찾기 * 파일 사람들.
$ egrep '*' people
위의 5와 6을 결합하여 두 표현식을 모두 찾으십시오.

$이그렙 '(관리자)|*'사람들