Linux/Ubuntu - grep 명령어로 문자열 검색

grep 명령어를 사용하여 특정 디렉토리 및 하위 디렉토리의 파일들 중에서 특정 키워드가 포함되어있는지 검색을 할 수 있습니다.

상황에 따라서 원하는 문자열을 검색하려면 어떤 명령어를 사용해야하는지 알아보겠습니다.

1. 특정 파일에서 패턴 검색

다음과 같이 어떤 파일에서 pattern에 해당하는 내용을 검색할 수 있습니다.

grep <pattern> <file>

예를 들어, 아래와 같이 특정 파일에서 for에 대한 내용이 있는지 검색할 수 있습니다.

$ grep "for" LinkedList/DoublyLinkedList.cpp
        for (int i = 1; i < (position-1) && inserted_prev->next != NULL; i++) {
        for (int i = 1; i < position && removed->next != NULL; i++) {

2. 디렉토리의 모든 하위 파일들에서 패턴 검색

아래와 같이 어떤 디렉토리의 모든 하위 파일들에 대해서 pattern에 해당하는 내용을 검색할 수 있습니다. -r은 Recursive로 디렉토리와 하위에 있는 모든 디렉토리를 재귀적으로 탐색하겠다는 의미입니다.

grep -r <pattern> <directory>

다음과 같이 명령어에 디렉토리를 생략하면, 현재 터미널의 작업 디렉토리와 하위 디렉토리에 대해서 검색을 합니다.

$ grep -r "dart"
dart-code-startup-log-574d.txt:[3:33:32 PM] [General] [Info] Searching for dart
dart-code-startup-log-574d.txt:[3:33:32 PM] [General] [Info]     Looking for dart in:

디렉토리를 입력하면 그 디렉토리의 모든 하위 파일들에 대해서 검색합니다.

$ grep -r "for" algorithms/
algorithms/java/DoublyLinkedList/MyLinkedList.java:    // Definition for doubly-linked list.
algorithms/java/DoublyLinkedList/MyLinkedList.java:        for (int i = 0; i < index; i++) {
algorithms/LinkedList/SinglyLinkedList.cpp:		for (int i = 1; (inserted_prev->next != NULL) && (i < position-1); i++) {
algorithms/LinkedList/SinglyLinkedList.cpp:		for (int i = 1; (removed->next != NULL) && (i < position-1); i++) {

2. 특정 디렉토리를 제외하고, 문자열 검색

--exclude-dir=[dir]을 입력하면 터미널의 작업 디렉토리의 하위 파일들 중에 설정한 디렉토리를 제외하고 검색한 결과를 보여줍니다.

$ grep -r "for" --exclude-dir=java/
LinkedList/DoublyLinkedList.cpp:        for (int i = 1; i < (position-1) && inserted_prev->next != NULL; i++) {
LinkedList/DoublyLinkedList.cpp:        for (int i = 1; i < position && removed->next != NULL; i++) {

--exclude-dir를 사용하지 않았다면 아래와 같이 java/ 디렉토리의 결과도 보여줍니다.

$ grep -r "for"
java/DoublyLinkedList/MyLinkedList.java:    // Definition for doubly-linked list.
java/DoublyLinkedList/MyLinkedList.java:        for (int i = 0; i < index; i++) {
LinkedList/DoublyLinkedList.cpp:        for (int i = 1; i < (position-1) && inserted_prev->next != NULL; i++) {
LinkedList/DoublyLinkedList.cpp:        for (int i = 1; i < position && removed->next != NULL; i++) {

3. 대소문자 구분 없이 검색

grep 명령어는 기본적으로 대소문자를 구분하여 검색을 합니다.

$ grep -r "For"
.git/info/exclude:# For a project mostly in C, the following would be a good set of

만약 대소문자 구분 없이 검색을 하고 싶을 때, 아래와 같이 -i 옵션을 입력하면 됩니다.

$ grep -r -i "For"
java/DoublyLinkedList/MyLinkedList.java:    // Definition for doubly-linked list.
java/DoublyLinkedList/MyLinkedList.java:        for (int i = 0; i < index; i++) {
.git/info/exclude:# For a project mostly in C, the following would be a good set of

4. 특정 패턴으로 시작하는 문자열 검색

문자열 앞에 ^를 붙이면, Line에서 문자열로 시작하는 경우만 찾아서 결과로 보여줍니다.

$ grep "^int" LinkedList/DoublyLinkedList.cpp
int main()

^를 붙이지 않으면, 중간에 있는 int들도 검색이 됩니다.

$ grep "int" LinkedList/DoublyLinkedList.cpp
    int data;
void PrintList(struct ListNode* head) {
int main()
    PrintList(head);

5. 정규식 패턴으로 문자열 검색

지금까지 예제에서 검색하려는 패턴에 문자열만 사용하였습니다.

하지만 grep 명령어는 아래와 같이 정규표현식을 사용하여 원하는 형식의 문자열을 찾을 수도 있습니다.

$ grep "void.*{" LinkedList/DoublyLinkedList.cpp
void PrintList(struct ListNode* head) {
void DLLInsert(ListNode **head, int data, int position) {
void DLLDelete(ListNode **head, int position) {

6. References

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha