기존의 grep와 같은 기계에서 같은 구식 검색 도구를 사용하는 것에 지친 경우 어떻게 하시겠습니까? 타협하지 마세요. Windows에는 여러 가지 grep과 유사한 도구가 있어 원하는 것을 정확하게 검색할 수 있습니다.
이 튜토리얼에서는 이러한 grep과 유사한 도구들이 파일을 더 빠르게 검색하고 필요한 정보를 순식간에 찾을 수 있도록 하는 방법을 배우게 될 것입니다.
계속해서 강력한 검색 도구에 친구가 되어 보세요!
전제 조건
이 튜토리얼은 실습을 포함하고 있습니다. 따라하기 위해 다음 사항을 준비해주세요:
- A Window machine – This tutorial uses Windows 10 PC, but any version of Windows will suffice.
- PowerShell – 이 튜토리얼은 PowerShell 7.2.8을 사용합니다.
- scoop – 이 튜토리얼은 scoop v0.3.1을 사용합니다.
특정 텍스트 문자열(findstr
) 파일 내에서 찾기
파일에서 특정 문자열(특정 패턴을 가진)을 즉시 찾을 수 있다면 작업 흐름에 큰 도움이 됩니다. 하지만 어떻게 할까요? Windows에서는 파일 내에서 특정 텍스트 문자열을 검색할 수 있도록 해주는 findstr
명령줄 유틸리티를 사용하세요.
findstr
은 Windows에서 일반적으로 grep과 유사한 기능을 제공하는 도구로 사용됩니다. findstr
을 사용하는 이점은 Windows 운영 체제에 기본으로 내장되어 있어 추가 소프트웨어가 필요하지 않다는 것입니다.
파일에서 특정 문자열을 찾으려면 다음 단계를 따르십시오:
선호하는 텍스트 편집기로 텍스트 파일을 만들고 notes.txt라는 이름으로 저장하고 아래 내용을 파일에 입력합니다.
Hello, world. This is an example of a text file.
I am writing some notes in this file.
Here are some keywords to search for: apple banana cherry.
이제 PowerShell을 관리자 권한으로 열고 다음 명령을 실행하여 notes.txt
파일에서 검색 패턴(”apple"
)에 대한 문자열(findstr
)을 찾습니다.
? findstr에는 검색을 사용자 정의하는 데 사용할 수 있는 많은 매개변수가 있습니다. 그러나 이 튜토리얼에서는 파일에서 문자열을 검색할 때 가장 유용한 일부 매개변수를 탐색합니다.

? 여러 파일에서 문자열을 검색하는 경우 파일 경로를 공백으로 구분하여 지정하면 됩니다. 아래 예시처럼:
findstr 매개변수 "패턴" "C:\\경로\\파일1.txt" "C:\\경로\\파일2.txt"
특정 패턴이나 리터럴과 일치하는 문자열 찾기
작업할 때 구성 파일에서 특정 패턴이나 리터럴을 찾는 것은 중요합니다. 특히 디버깅할 때 말이죠. 다행히도 /c
매개변수는 findstr
명령어가 지정된 패턴과 일치하는 리터럴 문자열을 검색하도록 지시합니다. 이는 공백이나 특수 문자를 포함한 문자열도 포함합니다.
findstr
명령에 /c
매개변수를 추가하면 다음과 같은 경우에 유용합니다:
- 특정 순서로 나타나는 구절이나 단어 세트를 검색합니다.
- 공백이나 특수 문자를 포함하는 문자열을 검색합니다.
/c
매개변수가 작동하는 방식을 확인하려면 다음 단계를 따르세요:
1. 아래의 findstr
명령을 실행하여 *notes.txt*
파일에서 리터럴 문자열(/c
) banana cherry
를 검색합니다.
아래 출력에서 findstr
명령은 두 단어 사이에 공백이 있는 정확한 문자열 banana cherry
만을 포함하는 라인만 반환합니다.
/c
매개변수는 대소문자를 구분하므로, findstr
명령은 지정한 대소문자와 정확히 일치하는 문자열만 반환합니다.

2. 다음으로, 다음 줄을 notes.txt 파일에 추가하고 변경 사항을 저장하세요.
이 시점에서 notes.txt 파일에 “hello” 문자열이 있는 두 줄이 있어야합니다. 소문자로 한 줄 (hello, world.
)과 대문자 ‘H’가 있는 다른 한 줄 (Hello, world.
)입니다.
hello, world.
3. 이제 각 명령을 실행하여 notes.txt
파일에서 hello, world
또는 Hello, world
문자열 리터럴을 검색하십시오.
notes.txt 파일에 ‘hello, world’ 문자열이 포함된 두 줄이 있더라도 아래에서 볼 수 있듯이 문자열의 한 줄만 얻습니다.
/c
매개 변수는 ‘hello, world’ 문자열을 포함하는 줄을 소문자 또는 대문자 ‘H’로 출력하도록 findstr
명령에 지시합니다.

4. 마지막으로 아래의 findstr
명령을 실행하여 notes.txt
파일에서 hello
패턴을 포함하는 문자열을 검색하고 (/i
) 대소문자를 무시하십시오.
대소문자 구분 검색은 이미 찾고 있는 문자열의 실제 대소문자를 알고있는 경우 잘 작동합니다. 그러나 문자열의 대소문자에 관계없이 패턴과 일치하는 모든 문자열의 줄을 보려면 /i
매개 변수를 사용하면 됩니다.

파일 및 디렉터리 내에서 지정된 문자열 찾기
findstr
명령을 사용하면 파일, 디렉터리 및 하위 디렉터리에서 일치하는 문자열을 검색할 수 있습니다.
특정 단어가 내용에 포함된 디렉터리의 모든 파일을 찾고 싶다면, /s
매개변수가 작업을 처리하도록 합시다. 현재 디렉터리 및 하위 디렉터리에서 모든 파일을 검색하려면 아래 명령을 실행하세요. 이 명령은 대소문자를 무시하고 ‘system’ 문자열을 포함하는 모든 파일을 찾습니다.
*.*
‘system’ 문자열을 포함하는 파일만 검색한다는 점을 명심하세요. systematic이나 systemize와 같은 더 큰 단어의 일부인 파일은 검색되지 않습니다.
아래 출력에서는 각 줄마다 파일 이름이 표시되며, 해당 파일에 ‘system’ 문자열이 포함되어 있습니다.

선택 문자열(cmdlet)을 사용하여 문자열 검색
지금까지 findstr
명령이 문자열을 찾는 데 탁월하게 작동한다는 것을 보았지만, Select-String
cmdlet도 무시되어서는 안 됩니다. 이 cmdlet은 Windows의 grep과 동등하며 파일과 문자열에서 특정 텍스트 패턴을 검색할 수 있습니다.
Select-String
cmdlet이 작동하는 방법을 확인하려면 다음 단계를 따르세요:
1. 먼저 notes.txt 파일을 열고 다음 줄을 추가하고 변경 사항을 저장하세요.
이러한 줄을 추가하는 것은 다음 단계에서 Select-String
cmdlet이 대문자/소문자를 구분하는 방법을 보여주기 위한 준비입니다.
Apple
APPLE
ApplE
2. 다음 명령을 실행하여 notes.txt
파일에서 문자열 apple
을 검색하세요.
아래에서 여러 줄에는 대소문자가 다른 ‘apple’ 문자열이 포함되어 있습니다. 이는 Select-String
cmdlet이 대소문자를 구분하지 않기 때문입니다. 하지만 일치하는 문자열을 쉽게 확인할 수 있도록 강조 표시되어 있습니다.

? 정규식 매칭 대신 간단한 문자열 매칭을 사용하려면 아래와 같이
-SimpleMatch
매개변수를 추가하면 됩니다. 이렇게 하면 정규식 구문과 특수 문자에 대해 걱정할 필요가 없습니다.Select-String 'APPLE' "C:\\myfiles\\notes.txt" -SimpleMatch
3. 이제 아래 명령을 실행하여 notes.txt
파일에서 대소문자 구분을 활성화한 상태에서 APPLE
을 검색하세요 (-CaseSensitive
). -CaseSensitive
매개변수는 검색 정확도를 위해 유용합니다.
아래에서 볼 수 있듯이, 일치하는 항목은 정확하게 지정한 대소문자를 가지고 있습니다 (APPLE).

4. 마지막으로, 아래 명령을 실행하여 모든 텍스트 파일 (*.txt
)에서 패턴 '\?'
(물음표)을 찾으세요. 정규식을 사용하면 더 복잡한 패턴을 검색할 수 있습니다. $PSHOME\en-US
디렉토리에서 실행하세요.
파일 내용에 물음표가 포함되어 있으면 명령이 파일의 전체 경로를 콘솔에 반환합니다. 아래와 같이 표시됩니다.

Windows에서 grep Equivalent로 ripgrep (rg) 사용하기
rg는 정규식 패턴을 사용하여 파일을 빠르게 검색하기 위해 설계된 오픈 소스 명령 줄 유틸리티입니다. 다른 명령 줄 유틸리티와 마찬가지로 rg에는 검색을 사용자 정의하는 많은 옵션과 기능이 있습니다.
그러나 findstr
및 Select-String
cmdlet과 달리 rg는 Windows OS에 기본적으로 설치되어 있지 않습니다.
Windows에서 grep Equivalent로 rg를 사용하려면 다음을 수행하십시오:
1. 시스템에 ripgrep
를 install
하기 위해 아래의 scoop
명령을 실행하십시오. scoop install ripgrep

2. 다음으로 아래의 rg
명령을 실행하여 rg의 설치된 버전을 확인하십시오.
아래와 같이 rg가 설치된 버전 번호가 표시됩니다. 이 시점에서 이제 rg
명령을 사용하여 문자열을 검색할 수 있습니다.

3. 아래의 rg
명령을 실행하여 notes.txt
파일에서 문자열 apple
을 검색하십시오.
출력은 아래에 표시된 대로 notes.txt 파일에 포함된 문자열 apple을 포함하는 모든 줄을 표시합니다.
출력이 Select-String
cmdlet의 출력과 유사함을 주목하십시오. 하이라이팅 대신 rg
는 빠른 구별을 위해 일치하는 문자열과 줄 번호의 색상을 변경합니다.

4. 이제 정규식을 사용하여 notes.txt
파일에서 문자열을 검색하는 다음 명령을 실행하십시오.
아래의 정규 표현식은 단어 경계(\b
)를 사용하며, rg
에게 ‘s’로 시작하고 ‘e’로 끝나는 단어가 포함된 문자열 라인을 검색하도록 지시합니다(s\w+e
).

특정 파일 유형으로 검색 필터링하기
아마도 찾고 있는 파일이름은 상관없지만 파일이 위치한 디렉터리에 대해서는 특정할 수 있을 것입니다. 이런 경우에는 파일 유형으로 검색을 필터링하면 가장 좋은 옵션이 될 수 있습니다.
특정 파일 유형으로 검색을 필터링하면 특정 유형의 파일만 찾고 싶을 때 유용합니다. 또는 검색에서 특정 유형의 파일을 제외하고 싶을 때 사용할 수 있습니다.
검색을 특정 파일 유형으로 필터링하려면 다음과 같이 --type
옵션을 사용하면 됩니다:
1. 다음의 rg
명령을 실행하여 C:\\myfiles
디렉터리의 모든 텍스트 파일(--type txt
)에서 문자열 apple
을 검색합니다.
--type
옵션은 파일 유형을 인수로 취하여 지정된 파일 유형과 일치하는 파일만 검색하도록 rg
명령에게 알려줍니다.
아래 출력은 문자열 ‘apple‘을 포함하고 있는 라인과 관련된 파일 이름(notes.txt)을 보여줍니다.

2. 다음으로, notes.xml이라는 XML 파일을 생성하고 아래 코드를 채웁니다. 이 XML 파일은 와일드카드 검색이 어떻게 작동하는지를 보여주기 위한 준비 과정일 뿐입니다.
3. 이제 아래 명령을 실행하여 모든 (*.
)에서 문자열 apple
을 검색하세요. 이 명령은 지정된 -g
와 함께 txt
및 xml
파일만 검색합니다.
기본적으로 rg
는 대소문자를 구분합니다. 결과적으로 출력에는 ‘apple’이라는 정확한 문자열을 포함하는 라인과 해당 파일만 표시됩니다.

4. 마지막으로 세 번째 단계와 같이 다음 명령을 실행하여 모든 파일 (*.
)에서 txt
또는 xml
확장자가 있는 문자열 apple
을 검색하세요. 이번에는 -i
옵션을 추가하십시오. 이는 rg
에 대소문자를 무시하도록 지시합니다.

결론
이 튜토리얼을 통해 Windows에서 문자열을 리터럴하게 또는 정규식을 사용하여 검색하는 여러 grep 등가물을 배웠습니다. 여러 옵션과 매개변수를 사용하여 검색을 사용자 정의하고 특정 파일 유형을 필터링하는 데 이러한 grep 등가물의 기능을 활용했습니다.
이 시점에서 여러분은 문제를 디버깅하고 문제를 식별하며 대량의 텍스트 파일을 검색하는 데 자신감을 가질 것입니다.
이제 새로운 기술을 정규식으로 연습하고 검색을 사용자 정의해 보는 것은 어떨까요?
Source:
https://adamtheautomator.com/grep-equivalents-in-windows/