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
Related Posts
- Ubuntu/Linux - 특정 이름이 들어간 파일 모두 찾고 삭제하기
- Ubuntu/Linux - 특정 이름이 포함된 프로세스 모두 종료
- Ubuntu/Linux - 사용자 계정 이름 확인 (id, whoami)
- Ubuntu/Linux - E: unable to locate package 에러 해결
- Ubuntu 22.04/20.04 - Yarn 설치 방법
- Linux/Ubuntu - grep 명령어로 문자열 검색
- Linux/Ubuntu - 터미널에서 seq로 명령어 N회 반복
- Linux/Ubuntu - wc 명령어로 Line(줄) 개수 세기
- bash: pip: command not found 문제 해결 (Linux/Ubuntu)
- Ubuntu 22.04 - Swap 메모리 늘리기
- Linux - 파일이 수정된 날짜/시간 확인 방법
- Linux - 파일, 디렉토리 삭제 명령어(rm -rf, rmdir)
- 우분투 22.04 - deb 파일 설치하기
- Ubuntu 20.04 - OpenJDK 11 설치, 삭제
- Linux - ps 명령어로 실행 중인 프로세스(PID) 확인
- Ubuntu 20.04 - SSH 설치와 접속 방법
- Ubuntu에서 PPA 저장소 추가, 제거 방법
- Ubuntu 22.04 - Brave 브라우저 설치
- Ubuntu 22.04 - 프로스트와이어(FrostWire) 설치
- Ubuntu 22.04 - Remmina 설치 방법
- Ubuntu 22.04 - Rust 설치하기
- Ubuntu 22.04 - 텔레그램 설치하기
- Ubuntu - Deluge 토렌트 클라이언트 설치
- Ubuntu JDK 17 (OpenJDK) 설치, 삭제
- Ubuntu 20.04 스팀(Steam) 설치 방법
- Ubuntu에서 draw.io 설치하는 방법
- 우분투에 VMware 설치하기
- [Ubuntu] VMware에서 Windows 11 설치
- Vi/Vim에서 1줄 또는 여러줄 삭제 방법
- Vi/Vim에서 라인 번호 표시하 기
- 우분투에서 rar 압축, 압축 풀기
- Ubuntu에서 구글 드라이브 사용하기 (로컬 폴더에 마운트)
- [Ubuntu] apt-cache search, 설치 가능한 패키지 검색
- Ubuntu - DNS 캐시 삭제 방법
- Ubuntu에서 사용할 수 있는 Text Editor 소개