'grep' 명령어는 사람들이 명령어의 잠재력을 완벽히 쓰지 못하고 있는 심도있고 좋은 기술의 명령어이다. 'grap' 명령어 부터는, 실습이 아닌 개념을 설명하는 글을 작성해보려고 한다.
'grep'은 찾으려는 패턴을 파일에서 찾아준다.
아래는 'grep' 명령어로 'e' 패턴을 갖고 있는지 파일에서 찾아서 보여준다.
위처럼 'GrepTest.txt' 파일에 있는 'e' 패턴이 탐색되어 빨간색으로 표시되었다.
참고로 소대문자를 가리지 않고 검색하고 싶은 경우 뒤에 -i 옵션을 추가해주면 된다.
'grep' 명령어의 -w 옵션도 많이 활용된다.
-w 옵션을 보기 쉽게 설명하기 위해 GrepTest.txt 파일의 내용을 'nano' 커멘드르 활용해 일부 수정했다.
만약에 'red'라는 단어만 확실하게 찾고 싶은데 위 명령어처럼 grep "red" GrepTest.txt를 검색해도 원하는
결과값을 얻지 못한다. redddd라는 것도 red 패턴을 갖고 있기 때문이다.
이럴때 grep의 -w 옵션을 활용한다.
그러면 이렇게 원하는 단어만을 완벽하게 파일에서 탐색하여 보여준다.
find 명령어는 재귀적으로 순환하여 디렉토리의 하위 폴더도 확인한다.
grep 명령어도 비슷한 형식으로 작동한다. -r 옵션을 사용하여 인자값으로 원하는 것을 넣고
따로 디렉토리는 지정하지 않는다면, 해당 위치에 있는 디렉토리와 파일들을 모두 재귀적으로 순회하여
넣은 인자의 값을 찾아준다.
물론 디렉토리 경로를 지정해서 재귀해서 찾게 해주어도 상관 없다!
gerb 에서 -c 옵션은 넣은 인자를 파일에서 찾아서 수를 세어준다.
위에서 말한 -w 옵션과 같이 사용한다면 인자값을 단어로 형태로 파일에 쓰인 것만 찾아 세어준다.
찾고싶은 인자값의 앞 행이나 뒤 행을 확인하고 싶은 경우 -A 혹은 -B 옵션을 활용하면된다.
예시로 -A2라고 옵션을 주면 찾은 인자값 행의 아래 두개의 행을 보여준다. -B는 반대로 생각하면 된다.
참고로 -C 옵션을 사용할 수 도있다. 위아래 행의 내용을 보여준다.
예를들어 -C2 옵션의 결과값은 -A2 와 -B2의 옵션을 합쳐 사용한 결과값과 동일하다.
그리고 -n 옵션도 유용하다.
찾는 인자값의 행 위치를 알려준다!
표시되는 개수를 제한하는 옵션이 있다. 바로 -m 이다.
이렇게 -m 옵션에 1값을 넣어줌으로써 가장 먼저 발견하는 인자값을 파일에서 찾을 수 있다.
당연히 -n 옵션을 활용하면 그 찾은 첫번째 값의 행 위치가 어디인지 확인할 수 있다.
greb의 장점은 정규식이다. 정규식에서 작동하는 구문과 문자를 이해해야 한다.
---------------------------------------------------- ----------------------------------------------------- -----------------------------------------------------
정규식들에 대해 정리해본다.
'.' : 하나의 문자를 의미한다. 아래는 '.' 사용 예시이다.
'^' : 행의 시작을 의미한다.
이렇게 이루어진 폴더에서 '^i'을 활용하면, 'i'를 행의 첫번째로 사용한 행들만 나타내준다.
'$' : 행의 끝을 의미한다. '^'의 반대라고 생각하면 된다.
'[abc]' : 대괄호를 사용하여 문자 집합도 가능하다. 대괄호 사용법은 앞서 많은 리눅스 공부 글에서 다뤘다.
대괄호 안에 '^'을 쓸 경우, '^'는 행의 시작을 의미하는 것이 아닌 'not'역할을 한다!!
'?' : 앞의 단어를 있거나 없는 단어로 취급한다. (이 정규식을 잘 설명하기 위에 GrepTest 파일 일부 수정함)
'?'를 정규식으로 사용하기 위해선 -E 옵션을 넣어주어야 한다.
위처럼 "blues"를 인자로 넣으면 "blues"만 찾지만,
-E 옵션과 함께 '?'를 정규식으로 사용하면 위와 같은 결과가 나온다. 앞의 단어를 있거나 없는 셈 치는 것이다.
'{}' : 중괄호는 앞에 대괄호에 있는 패턴을 따라간다. 예를 들어, [A]{3}은 AAA를 의미하며,
[A-Z]{3}은 A-Z A-Z A-Z를 의미한다. 이 역시 뒤에 -E 옵션을 작성해주어야 한다.
확장 정규 표현식을 사용할땐, 대부분 -E를 붙여준다고 생각하면 편하다.
----------------------------------------------------- ----------------------------------------------------- -----------------------------------------------------
이제 grep을 파이프를 활용해보는 법을 알아본다.
'ps -aux' 명령어는 현재 컴퓨터에서 실행되고 있는 모든 프로세스들을 보여준다.
이 명령어를 통해 프로세스에 문제가 생겼을때, grep을 파이프연결하여 원하는 텍스트 덩어리를 찾을 수 있다.
위에를 보면 현재 실행되고 있는 프로세스가 무수히 많은데 grep을 파이프 연결하여 활용하면 원하는 파일을 찾을 수 있다.
grep을 man과 파이프연결해서 사용하면 원하는 명령어를 찾기 쉬워질 것이라 생각된다. 물론 '/'를 활용하여 찾아도 된다.
찾은 단어의 파일 경로가 궁금하다면 grep 명령어의 -l옵션을 활용하면 된다.
복잡한 정규식을 활용해 grep 명령문을 작성하는것은 쉽지 않은 일이다.
인터넷에 최적의 grep 정규식을 활용한 좋은 명령문들이 많이 있다.
'grep -r -E 원하는 정규식' 이렇게 명령어를 치면 된다.
'Linux' 카테고리의 다른 글
Linux_About Enviroment (0) | 2024.03.27 |
---|---|
Linux_About Permission (0) | 2024.03.25 |
Linux_Find Excercise (0) | 2024.03.20 |
Linux_Expansion Exercise (1) | 2024.03.17 |
Linux_Piping Exercise (0) | 2024.03.15 |