grep : 검색할 때 사용. 필터링 기능이다.
gerp bash/etc/passwd : passwd에서 bash가 들어간 부분을 보여준다.
cat /etc/passwd | grep bash : 파이프로 넘겨서 검색한다.
grep -i : ignore case. 대소문자를 구분하지 않고 검색한다. 출력 결과가 없으면 출력하지 않는다.
grep -v : invert match 검색할 문자열이 나타나지 않는 행을 출력한다.
ls/etc | grep cron : ls/etc의 결과 중 cron이 있는 것만 출력한다.
grep 은 해당 문자열이 포함된 행 전체를 출력한다.
정규 표현식이라는 검색 패턴을 줄 수 있다.
조건에 일치하는 문자열 집합을 표현할 수 있다.
특정 문자열로 시작하거나 숫자 없이 알파벳으로만 구성된 문자열 등을 찾으라고 할 수 있다.
조건에 맞는 문자열들을 모두 찾을 때 사용한다.
^ : 행의 시작을 의미한다.
ls /etc | gerp '^cron' : ls /etc 결과에서 cron으로 시작하는 문자열이 있는 행을 출력한다.
정규 표현식은 항상 작은따옴표로 감싸는 것이 좋다.
* 는 셸에서 와일드카드로 해석되어 경로가 확장된다.. : 임의의 문자 하나를 의미한다. 알파벳, 숫자, 기호, 문자를 포함한다.
grep 't..t' example.txt : example.txt에서 t..t에 해당하는 행을 출력한다.
.org로 검색하면 borg와 .org가 검색된다.
임의의 문자가 아니라 기호 자체를 검색하고 싶으면 \. 을 입력한다.
grep \.org example.txt : .org를 검색한다.
? : 셸에서는 문자 하나이다.
grep t[ef]st example.txt : e 또는 f일 때 출력한다. 대괄호는 한 문자를 의미한다.
[abcdefg] : [a-g]
grep 'mail[1-4]' example.txt : mail1, mail2, mail3을 찾아라는 의미이다.
grep 'mail[^13]' example.txt : mail1, mail3이외의 문자를 찾아라. [] 안에 포함되지 않는 문자가 있는 행만 출력하라.
\ : 다음의 문자를 메타 문자로 인식하지 않는다.
^ : 문장의 처음을 나타낸다.
$ : 문장의 마지막을 나타낸다. net$로 검색하면 끝이 net인 것만 출력한다.
grep '^net$' example.txt : net으로 시작하고 net으로 끝나는 행을 출력한다.
grep '^$' example.txt : 빈 행만 출력하라.
vi에서 o 로 줄 사이 빈 행을 넣을 수 있다.
grep -v '^$' example.txt : 빈 행을 제외하고 출력한다.
-v옵션은 검색할 문자가 나타나지 않는 행을 출력한다. invert match이다.
grep -v '^$' example.txt > example2.txt : 빈 행을 없앤 것을 파일로 출력한다.
직전의 정규 표현식이 일정 횟수만큼 반복되는 것을 의미한다.
항상 뒤에 오며 같이 쓰인다.
* : 0회 이상 반복을 의미한다. 직전의 문자가 나타나지 않는 것도 포함한다.
grep 'Be*r' test.txt : 앞의 문자 0회 이상 반복되는 행을 출력한다. 0회도 출력한다.
grep '^B[ea]*r$' test.txt : B로 시작하고, e 또는 a가 0번 이상 반복, r로 끝나는 행을 출력한다.
지금까지의 정규 표현식은 기본 정규 표현식이라 불리는 것으로 정규 표현식을 지원하는 모든 명령어에서 사용할 수 있다.
사용할 수 있는 메타 문자가 늘어난 확장 정규 표현식도 있다.
확장 정규 표현식을 지원하지 않는 명령어도 있기 때문에 이 둘을 구분해서 사용해야 한다.
-E 옵션을 지정하면 확장 정규 표현식으로 해석한다.
+ : 바로 전 문자가 1회 이상 반복되는 것 의미
grep -E 'Be+r' test.txt : e가 1회 이상 반복되는 문자열이 있는 행을 출력한다.
* 과 비슷하지만 0번 나타나는 것은 포함하지 않는다. Br은 검색되지 않는다.
? : 바로 전 문자가 0회 혹은 1회 반복을 의미한다.
grep -E 'Wine ?Wine' test.txt : 두 wine 사이에 공백이 하나 있는 경우와 없는 경우 행이 출력된다.{m,n} : 바로 전 문자가 m회 이상 n회 이하 반복을 의미한다.
grep -E 'Be{1,2}r' test.txt : e 가 1회, 2회 반복인 행을 출력한다.
grep -E 'Be{2}r' test.txt : e가 정확하게 2번 반복인 행을 출력한다.
[0-9]{3}-[0-9]{4}-[0-9]{3} : 0-9중 하나가 3번 반복 - 4번 반복 - 3번 반복 인 행을 출력한다. (전화번호 010-9999-999)
grep -E 'Be{4,}r' drink.txt : 바로 전 문자가 4회 이상 반복인 경우 행을 출력한다.
{}를 기본 정규 표현식에서 사용하려면 \를 앞에 붙여야 한다.
반복 횟수를 지정하는 메타 문자 정리
*: 0회 이상 반복+: 확장 정규 표현식만 가능. 1회 이상 반복?: 확장 정규 표현식만 가능. 0 또는 1회{m,n}: m회 이상 n회 이하 반복 기본 정규 표현식은\{m,n\}으로 사용.{m}: 정확히 m회 반복,\사용해야함.{m,}: m회 이상 반복,\사용해야 함.
() : 정규 표현식을 그룹화한다.
grep -E 'Wine{2,}' test.txt : Winee ~ 인 경우 출력한다.
grep -E '(Wine){2,}' test.txt : WineWine ~인 경우 출력한다.
| : 여러 정규 표현식을 or조건으로 연결할 때 사용
grep -E (abc|xyz) test.txt : abc 또는 xyz라는 문자열에 해당 하는 경우 행 출력
grep -E 'my (vodka|wine)' test.txt : my vodka 또는 my wine인 경우 행이 출력된다.
기본 정규 표현식에서 ()를 사용하려면 \를 앞에 붙인다.
|는 기본 정규 표현식에서 사용할 수 없다.
/Be*r : vim에서 정규 표현식으로 검색이 가능하다.
sed, awk에서도 정규 표현식을 사용할 수 있다.
펄, 루비, 자바에서도 사용할 수 있다.