grep

grep

보통

소개

동네 도서관에서 오래된 책들을 정리하는 일을 맡게 됐어요. 도서관을 찾는 학생들은 학기말 논문에 인용할, 어렴풋이 기억나는 구절을 찾느라 자주 헤매곤 하죠. 책을 한 권씩 처음부터 끝까지 직접 읽는 대신, 그런 부분 인용구를 찾아 훑어볼 작은 도구를 만들기로 해요.

지침

검색 문자열과 일치하는 줄을 파일에서 찾아, 일치하는 모든 줄을 반환해요.

Unix grep 명령은 정규 표현식과 일치하는 줄을 파일에서 검색해요. 이번 과제는 고정 문자열 검색을 지원하는 단순화한 grep 명령을 구현하는 거예요.

grep 명령은 세 가지 인자를 받아요:

  1. 검색할 문자열.
  2. 명령의 동작을 바꾸는 0개 이상의 플래그.
  3. 검색할 파일 하나 이상.

그런 다음 지정된 파일의 내용을 (지정된 순서대로) 읽고, 검색 문자열을 포함하는 줄을 찾아, 마지막으로 찾은 순서대로 그 줄들을 반환해요. 여러 파일을 검색할 때는 일치하는 각 줄 앞에 파일 이름과 콜론(':')을 붙여요.

플래그

grep 명령은 다음 플래그를 지원해요:

  • -n 출력의 각 줄 앞에 줄 번호와 콜론(':')을 붙여요. 번호는 파일 이름이 있으면 파일 이름 뒤에 와요.
  • -l 일치하는 줄이 하나 이상 있는 파일의 이름만 출력해요.
  • -i 대소문자를 구분하지 않고 비교해서 일치 여부를 판단해요.
  • -v 동작을 반대로 뒤집어요. 일치하지 않는 모든 줄을 모아요.
  • -x 검색 문자열이 줄 전체와 일치하는 줄만 검색해요.

PowerShell 트랙

플래그 변경

PowerShell은 함수에 스위치 매개변수를 지원하는데, 이는 명령줄의 플래그와 비슷하게 동작해요.

cmdlet과 그 속성에 길고 자세한 이름을 붙이는 PowerShell의 관습에 맞춰, 이 연습 문제에서 사용하는 플래그도 이름을 언어에 맞게 바꿨어요.

  • Line (-n): 출력의 각 줄 앞에 줄 번호와 콜론(':')을 붙이는데, 파일 이름이 있으면 그 뒤에 번호를 놓아요.
  • File (-l): 일치하는 줄이 하나 이상 있는 파일의 이름만 출력해요.
  • Insensitive (-i): 대소문자를 구분하지 않는 비교로 일치 여부를 판단해요.
  • Invert (-v): 프로그램의 동작을 반대로 뒤집어, 일치하지 않는 줄을 모두 모아요.
  • Whole (-x): 검색 문자열이 줄 전체와 일치하는 줄만 찾아요.

파일 처리

grep 함수를 구현하는 데 집중하고, 파일 경로를 제대로 가져오는 일은 걱정하지 않아도 돼요.

이 연습 문제는 테스트 스위트에서 필요한 텍스트 파일 세 개, iliad.txt, midsummer-night.txt, paradise-lost.txt를 제공해요. 평소처럼 파일 경로를 쓰는 대신 파일 이름 문자열로 Get-Content를 사용해 내용에 접근하면 돼요.

Cmdlet

PowerShell에는 grep과 비슷한 cmdlet으로 Select-String이 있어요. 관심이 있다면 여기에서 더 읽어볼 수 있어요. 이 연습 문제에서는 어디에서도 Select-String을 사용하면 안 돼요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
PowerShell Exercism

grep 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 PowerShell 트랙을 연습 문제 136개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.