대상 사용자: 소스·설정 파일에서 같은 문자열을 바꾸고, 적용 전 결과를 확인하려는 프로그래머. Windows 10/11 x64와 PowerShell을 기준으로 설명합니다.
sd는 텍스트 검색·치환 명령줄 도구입니다. 파일 이름을 주면 기본 동작이 파일 직접 수정이므로, 이 실습은 복사본·백업과 -p 미리보기를 먼저 사용합니다. JSON/YAML 구조를 검증하는 도구는 아니므로 치환 후 해당 파일의 문법 검사도 필요합니다.
1. 제공 파일과 공식 출처
sd-v1.1.0-x86_64-pc-windows-msvc.zip: 개발자 공식 릴리스에서 받은 Windows x64 원본 ZIP. 실행 파일, LICENSE, README, CHANGELOG, 매뉴얼·자동완성 파일을 변경하지 않았습니다.sd-windows-korean-guide-practice.zip: 한국어 HTML 설명서, UTF-8 실습 파일 2개와 각각의 정답, 복원 안내, 원문 MIT 라이선스·배포 고지. 이 설명서 ZIP에는 실행 파일이나 설치파일이 없습니다. 프로그램은 별도 공식 원본 ZIP 또는 아래 공식 다운로드에서 받습니다.
버전 표기: 공식 배포 태그·ZIP 이름은 v1.1.0이지만, 이번에 받은 Windows MSVC 실행 파일의 --version과 --help는 1.0.0을 표시했습니다. 공식 자산 SHA-256 일치와 -A 지원, 아래 실습 동작을 확인했습니다. 표시 차이의 원인은 단정하지 않습니다.
공식 Windows x64 MSVC ZIP 다운로드 · 버전 고정 공식 소스·문서 · MIT 라이선스 원문
공식 자산의 SHA-256:
59837c2e7c911099aca1cc46b663bcdc5a949fd3e9fbbaf34fc73e5d5d71007c
2. 설치: ZIP 풀기와 실행 확인
- 두 ZIP을 내려받습니다. 프로그램 ZIP은 파일 탐색기에서 우클릭 → 모두 추출로
C:\Tools등에 풉니다. x64용으로, 32비트 Windows에서는 사용할 수 없습니다. ARM64 PC는 공식 릴리스의 제공 자산과 시스템 호환성을 별도로 확인하세요. - 설명서 ZIP은 사용자 문서 폴더 등에 풀고
guide-ko.html을 브라우저로 엽니다. 아래 예제는 설명서 압축을 푼samples폴더에서 PowerShell을 열어 실행합니다. - 실제 프로그램 위치를 변수로 지정합니다. 실행 파일 경로와 samples 경로는 서로 달라도 됩니다.
$sd = 'C:\Tools\sd-v1.1.0-x86_64-pc-windows-msvc\sd.exe'
& $sd --version
& $sd --help
따옴표로 묶은 경로를 실행할 때 PowerShell 호출 연산자 &가 필요합니다. 시스템 PATH를 바꾸지 않아도 위 방법으로 사용할 수 있습니다.
3. 문자열 그대로 치환: 미리보기 → 백업 → 적용
practice.ini의 sensor.example만 gateway.example로 바꿉니다. 점·괄호·더하기 기호를 정규식으로 해석하지 않게 -F를 지정합니다.
& $sd -p -F 'sensor.example' 'gateway.example' '.\practice.ini'
Copy-Item -LiteralPath '.\practice.ini' -Destination '.\practice.ini.bak'
& $sd -F 'sensor.example' 'gateway.example' '.\practice.ini'
Get-Content -LiteralPath '.\practice.ini'
미리보기 명령은 변경될 내용을 표시하며 파일을 수정하지 않습니다. 적용 뒤 아래 내용인지 확인합니다. expected-practice.ini와 비교해도 됩니다.
device=lab-01 endpoint=http://gateway.example/v1 label=A+B
되돌리려면 아래 명령으로 백업을 복원합니다. 새 백업을 같은 이름으로 덮어쓰기 전에 원본이 보관되어 있는지 확인하세요.
Copy-Item -LiteralPath '.\practice.ini.bak' -Destination '.\practice.ini'
Get-Content -LiteralPath '.\practice.ini'
4. 정규식 캡처: PowerShell의 작은따옴표
captures.txt에는 count=12와 mode=active가 있습니다. 숫자 값만 있는 줄을 바꾸는 예제입니다.
& $sd -p '([a-z]+)=([0-9]+)' '$1: $2' '.\captures.txt'
Copy-Item -LiteralPath '.\captures.txt' -Destination '.\captures.txt.bak'
& $sd '([a-z]+)=([0-9]+)' '$1: $2' '.\captures.txt'
Get-Content -LiteralPath '.\captures.txt'
count: 12 mode=active
'$1: $2'는 작은따옴표로 감쌉니다. 큰따옴표를 쓰면 PowerShell이 달러 기호를 변수로 먼저 해석할 수 있습니다. 정규식 캡처를 사용하는 두 번째 예제에는 -F를 붙이지 않습니다.
5. 문제 해결
| 증상 | 확인 방법 |
|---|---|
| 실행 경로를 찾지 못함 | Test-Path -LiteralPath $sd로 압축을 푼 폴더와 sd.exe 위치를 확인합니다. 현재 폴더의 실행 파일은 .\sd.exe로 지정합니다. |
| 점·기호 주변까지 바뀜 | 고정 문자열이면 -F를 사용하고 먼저 -p로 확인합니다. |
| 캡처 결과가 비어 있음 | 치환식을 작은따옴표로 묶었는지, 원문이 정규식과 일치하는지 확인합니다. |
| 여러 줄을 잇는 패턴이 동작하지 않음 | 이 릴리스는 기본 줄 단위 처리입니다. 줄 경계를 넘는 검색에만 -A를 검토합니다. 전체 파일 처리이므로 메모리 사용도 달라집니다. |
| 한글·인코딩 문제가 생김 | 이 실습은 BOM 없는 UTF-8 파일입니다. 실제 UTF-16·CP949 파일은 복사본을 UTF-8로 저장해 시험합니다. PowerShell 버전별 리다이렉션·Set-Content 기본 인코딩에도 주의합니다. |
| 접근 거부 | 파일을 사용하는 프로그램을 닫고 사용자가 쓸 수 있는 복사본에서 실행합니다. 보호된 시스템 파일을 바꾸는 용도로 이 실습을 사용하지 않습니다. |
6. 검증 범위와 재배포 고지
공식 ZIP의 SHA-256이 GitHub 공식 자산 메타데이터의 값과 일치했고, 원본 LICENSE를 보존했습니다. 추출한 Windows 실행 파일로 버전·도움말, 고정 문자열·정규식의 미리보기와 적용, 미리보기 후 원본 바이트 불변, 백업 복원을 검증했습니다. 모든 프로그램의 설정 파일에 안전하게 적용된다는 뜻은 아닙니다.
sd는 MIT 라이선스입니다. 원본의 저작권·허가·면책 고지는 ZIP 안의 LICENSE에 보존되어 있습니다. 제공하는 프로그램 원본 ZIP은 수정하지 않았고 한국어 설명서·실습 자료는 별도 작성했습니다. 업데이트는 공식 릴리스를 확인하세요.