grep은 키워드나 패턴을 찾는 데 꽤 유용하게 쓰곤 합니다. 특히, grep -rn "keyword" . 꼴은 상당히 강력합니다. keyword를 포함하고 있는 파일을 제 현재 디렉토리에서부터 재귀적으로 찾아주기 때문입니다. 여기서 한 가지 더 질문. 특정 디렉토리를 제외하고 싶습니다. 혹은, 특정한 확장자만 검색 결과에 나오고 싶습니다. 이런 문제 상황들이 생각보다 자주 발생하는데요. 어떻게 하면 되는지 알아보겠습니다. 먼저 --exclude=GLOB입니다. 파일 이름이 pattern에 걸리는 경우 건너 뛴다고 되어 있어요. 그런데, suffix가 match 된다고 합니다. 접두사가 아니라 접미가 걸린다는 의미입니다. --exclude-dir은 파일 이름이 아닌, 폴더를 의미합니다. 폴더의 suffi..
grep 검색 결과
프로젝트에서 키워드를 검색해서 빠르게 분석하는 경우가 꽤 있었습니다. 그런데, 간혹 가다가 1줄에 굉장히 많은 문자들이 있는 결과까지 나와서 당황했던 경험이 있었습니다. 이런 결과들을 제외하려면 어떻게 해야 할까요? 결과가 매치되는 문자열 중에 특정 길이가 넘어가는 친구들을 제외해 봅시다. 먼저, 위 명령어는 파일 test.log 내에서 tomcat이라는 것이 매치되는 줄들을 모두 출력합니다. 그런데, 중간에 매우 긴 문자열이 하나 있는데요. 이 문자열의 길이가 얼마나 긴지 보겠습니다. 2075나 되네요. 이런 결과들을 제하려면 어떻게 해야 할까요? 먼저 .는 any character를 나타냅니다. 그래서, cat test.log | grep .는 어떤 문자가 있는 line을 출력합니다. 여기까지 보면,..
프로젝트를 분석하거나, 디버깅을 할 때 grep을 많이 이용하게 됩니다. 특정 키워드로 찾아 들어가면서 분석을 많이 하는 편인데요. 예를 들자면, a라는 패턴을 찾기 위해서 프로젝트 전체를 재귀적으로 탐색한 다음에 해당 코드를 보는 편입니다. 그런데, 저는 해당 패턴이 걸리는 줄 주변의 이전 라인, 다음 라인도 같이 출력을 하고 싶었습니다. 그러면 1개의 줄만 볼 때 보다 맥락을 조금 더 잘 파악할 수 있었을 것이기 때문입니다. 이런 옵션이 없었을 리가 없었습니다. 저만 몰랐을 뿐. grep 명령어에는 이런 처리를 위해, 몇 가지 옵션이 있는데요. -A, -B, -C 옵션에 대해 알아보겠습니다. 먼저 실험에 사용할 파일 1.txt에는 위와 같은 내용이 저장되어 있습니다. a부터 g까지 순서대로 적혀 있고..
폴더 내에 있는 파일들에서 특정한 키워드를 찾는 것을 생각보다 많이 하게 됩니다. 예를 들자면 프로젝트의 구조를 빠르게 파악하고자 할 때 저는 생각보다 많이 이용했는데요. 실습을 한 번 해 보겠습니다. 현재 find_test의 구조는 위와 같습니다. find_test 아래에는 디렉토리 1, 2가 있습니다. 디렉토리 1 밑에는 1.txt, 2.txt가 있고, 2 밑에는 3.txt, 4.txt가 있습니다. 다음에 find_test에는 디렉토리 1, 2 말고도 5.txt와 6.txt가 있습니다. 저는 특정 키워드를 찾을 때, r 옵션과 n 옵션을 저는 주로 씁니다. 이것은 탐색을 시작하는 디렉토리로부터 재귀적으로 탐색합니다. 보시면, 5.txt와 6.txt 뿐만이 아니라, 디렉토리 1과 2 밑에 있는 1.tx..
특정 폴더의 하위 폴더에 있는 확장자가 .log인 파일을 모두 찾고 싶어졌습니다. 어떻게 하면 될까요? 저는, 제일 쉬운 방법 중 하나인 grep 으로 하는 방법을 소개하고자 합니다. 물론, 이것 말고도 다른 방법도 있습니다만, 저는 grep을 자주 쓰는 사람이니, 이것을 기준으로 설명해 보도록 하겠습니다. ls는 디렉토리 내에 있는 내용들을 출력해 주는 명령어입니다. 제가 이것을 쓸 때 습관적으로 쓰는 옵션은 -ail 입니다. man 페이지를 쭉 보시다 보면, 왠지 익숙한 명령어가 보입니다. -R이 보입니다. 이것은, 서브 디렉토리들을 재귀적으로 탐색한다는 의미입니다. 다음에, 이 결과물을 가지고 piping을 할 건데요. grep 명령어로 할 거에요. 이 때에는 그냥, 정규 표현식을 입력해 주시면 됩..
최근댓글