# 202321017 - grep 프로젝트

- 202321017 조세현

grep은 유닉스 및 리눅스 시스템에서 사용되는 강력한 명령줄 도구 중 하나이다.
"Global Regular Expression Print"의 약자로, 파일에서 특정 문자열 또는 정규 표현식을 검색하고 해당 라인을 출력하는 기능을 제공한다.

## 프로젝트 개요

### 목적

grep의 기능을 이해하고, 해당 기능을 구현하여 유사한 도구를 개발하는 것이다.

### 주요기능

1. 문자열 검색: grep은 파일 내에서 지정된 문자열을 검색하는 데 사용된다.
   이를 통해 특정 단어, 문구 또는 패턴이 포함된 라인을 찾을 수 있다.

2. 정규 표현식 지원: grep은 정규 표현식을 사용하여 더 복잡한 검색 패턴을 지정할 수 있다.
   이를 통해 더 유연하고 정교한 검색이 가능하다.

3. 다양한 옵션 지원:
   -i 옵션: 대소문자 구분 없이 검색
   -v 옵션: 지정된 패턴을 포함하지 않는 라인 검색
   -r 또는 -R 옵션: 디렉토리 내의 모든 파일에서 재귀적으로 검색
   -n 옵션: 검색된 라인의 줄 번호 출력 등
   (Ex) 대소문자 구분 여부, 정규 표현식 사용 여부 등

4. 파일 및 디렉토리 검색: grep은 단일 파일 뿐만 아니라 디렉토리 내의 모든 파일에서도 검색할 수 있다.

5. 출력 형식 지정: grep은 기본적으로 검색된 라인을 표준 출력에 출력한다.
   그러나 옵션을 사용하여 검색 결과를 원하는 형식에 맞게 포맷팅할 수 있다.
   (Ex) 파일 이름과 라인 번호 출력

### 기대 결과

grep과 유사한 명령줄 도구를 구현하여, 파일 검색을 보다 효과적으로 수행할 수 있는 기능을 제공한다.
또한, 프로젝트를 통해 리눅스 및 유닉스 시스템 프로그래밍에 대한 이해를 향상 시킬 수 있다.

## 진행 계획

1. grep의 주요 기능 및 옵션을 분석하고, 프로젝트에서 구현할 핵심 기능을 결정한다.
2. grep의 기능을 구현하기 위한 소프트웨어 아키텍처를 설계한다.
   이 단계에서는 프로그램의 구조, 모듈 및 클래스의 설계를 수립한다.

3. 프로그래밍 언어 및 개발 환경을 선택하고, 코드를 작성하여 프로그램을 완성한다.

4. 다양한 시나리오에서의 테스트를 수행한다.
   유닛 테스트, 통합 테스트 및 시스템 테스트를 통해 프로그램의 안정성과 정확성을 검증한다.
