cmd.exe에 대한 sed like utility가 있습니까? [닫은]


149

Windows 명령 줄 ( cmd.exe )을 사용하여 프로그래밍 방식으로 파일 내용을 편집하고 싶습니다 . * nix에는 이 작업을위한 sed 가 있습니다. Windows에 유용한 기본 기능이 있습니까?


1
"네이티브"는 무슨 뜻인가요 ?? cmd.exe에서 작동하거나 설치하지 않고 작동하도록 설치 가능합니까? 전자 인 경우 아래의 GnuWin32 참조; 후자의 경우, 아니오. Windows 용 사전 설치된 기본 sed가 없습니다.
Michael Paulukonis

6
기본적으로 추가 항목을 설치하지 않고 모든 창에서 실행되는 솔루션을 의미했습니다.
Jakub Šturc

1
cmd.exe를 남겨두고 대신 PowerShell을 사용하십시오.
Bill_Stewart


파일에서 특정 줄을 삭제하려면 FIND /?
John Henckel

답변:


117

오늘 powershell은 저를 구했습니다.

들어 grep있다 :

get-content somefile.txt | where { $_ -match "expression"}

또는

select-string somefile.txt -pattern "expression"

그리고 sed거기에는 :

get-content somefile.txt | %{$_ -replace "expression","replace"}

자세한 내용은 Zain Naboulsis 블로그 항목을 참조하십시오 .


12
또한 일반적인 cmd에서 호출하려면 @powershell -Command "get-content ..."만 입력하십시오. 유일한 경고는 인용 부호를 피해야한다는 것입니다. ... -Command "get-content ... \"expression \ ", ..."
Tarc

1
@Tarc AFAIR, 당신은 명령에 작은 따옴표를 사용하고 대신 큰 따옴표를 사용하여 명령을 인용 할 수 있습니다

2
나는 오늘 특정 파일에서 따옴표 사이의 물건을 제거하기 위해 파일에서 이것을 시도했지만 출력이 원본보다 거의 두 배 큰 파일이라는 것을 발견했습니다. 그 이유는이 방법이 파일에서 줄 바꾸기를 처리하는 방식이 "\ n"대신 "\ r \ n"을 사용하도록 변경 되었기 때문인 것 같습니다.
user132278

1
\ r \ n으로 인해 배가되는 것은 파일이 순전히 줄 바꿈으로 구성되었음을 의미합니다. 실제 이유는 다음과 같습니다. encoding .
Amit Naidu

2
@ and-bri (Get-Content c : \ temp \ test.txt) .replace ( '[MYID]', 'MyValue') | Set-Content c : \ temp \ test.txt
AFP_555

94

sed (및 그 ilk)는 여러 유닉스 명령 패키지에 포함되어 있습니다.

아무것도 설치하지 않고 시스템이 Windows Server가 아닌 경우 스크립팅 언어 (예 : VBScript)를 사용할 있습니다. 아래는 총에 맞지 않는 갑상선입니다. 커맨드 라인은 다음과 같습니다

cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt

여기서 oldpat 및 newpat는 Microsoft vbscript 정규식 패턴 입니다. 분명히 나는 ​​대체 명령 만 구현하고 몇 가지 사항을 가정했지만 sed명령을 더 똑똑하게 이해하고 명령 줄을 더 잘 이해할 수 있습니다 .

Dim pat, patparts, rxp, inp
pat = WScript.Arguments(0)
patparts = Split(pat,"/")
Set rxp = new RegExp
rxp.Global = True
rxp.Multiline = False
rxp.Pattern = patparts(1)
Do While Not WScript.StdIn.AtEndOfStream
  inp = WScript.StdIn.ReadLine()
  WScript.Echo rxp.Replace(inp, patparts(2))
Loop

1
이것은 내가 원하는 것이 아니지만 VBS에 대한 종속성이 가장 가벼운 솔루션이라는 것을 믿었습니다.
Jakub Šturc

7
GnuWin32 네이티브 솔루션입니다. CygWin과 달리 "일반적인"Windows 환경에서 실행되도록 설계되었습니다. 그들에게 시도해보십시오, 당신은 그들이 사용하는 모든 Windows 시스템에있을 것으로 기대하기 시작합니다. !!!
Michael Paulukonis

3
내 경우에는 효과가 있습니다! 또한 "// NoLogo"cscript 옵션도 잊지 마십시오.
Marko Dumic

4
이것이 "커프 오프 (off-the-cuff)"라면, 다른 코드가 어떤지 궁금해! 정말 고마워
Sabuncu

2
JScript를 사용하여 유사한 정규식 검색 및 바꾸기 유틸리티를 수행 할 수 있습니다. VBScript에 비해 JScript의 장점은 단일 스크립트에서 배치와 쉽게 결합하여 배치 또는 명령 행 컨텍스트에서 유틸리티를보다 쉽게 ​​사용할 수 있다는 것입니다. REPL.BAT라는 강력한 하이브리드 JScript / 배치 유틸리티를 사용할 수 있습니다 . 많은 명령 행 옵션이 있습니다. 전체 문서가 스크립트 내에 포함되어 있습니다. 그것은 확실히 완전한 sed 기능을 가지고 있지 않지만, 그럼에도 불구하고, 그것은 매우 강력합니다.
dbenham


17

아무것도 설치하지 않으려면 (다른 컴퓨터에서 실행될 솔루션 / 프로그램 등에 스크립트를 추가한다고 가정합니다) vbs 스크립트를 작성하십시오 (replace.vbs라고 말하십시오).

Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)

Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.Write strNewText
objFile.Close

그리고 당신은 이것을 다음과 같이 실행합니다 :

cscript replace.vbs "C:\One.txt" "Robert" "Rob"

"bill weaver"에서 제공하는 sed 버전과 비슷하지만이 문자가 특수 ( '> </) 문자 측면에서 더 친숙하다고 생각합니다.

Btw, 나는 이것을 쓰지 않았지만 어디서 왔는지 기억할 수 없다.


10

슈퍼 Sed의는 나오지도의 향상된 버전. Windows의 경우 이것은 명령 행에서 실행하기위한 독립형 .exe입니다.


8
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt

이것은의 행동입니다

sed -i 's/^SourceRegexp$/DestinationString/g' file.txt

1
완벽하게 작동합니다. 참고 : "get-content"의 괄호는 "set-content"가 호출 될 때 파일이 나중에 사용되지 않도록합니다.
Kafu

cmd에서 비슷한 것이 가능합니까? 이해하십시오 이것은 pwsh 전용입니다
11

가능한 정규 표현식에 의해 'SourceRegexp'ment가 종속되어 있습니까? 파워 쉘에서 실제로 작동합니까?
scjorge

7

당신은 powershell을 시도 할 수 있습니다. 사용할 있는 get-contentset-content 커맨드 렛 빌드가 있습니다.


4
이것들은 아마도 PowerShell의 sed;-) 에 가장 적게 기여하는 두 가지 일 것입니다 . -replace운영자는 아마 더 좋은 제안입니다.
Joey

7

fart.exe를 시도하십시오. 명령 배치 프로그램에서 사용할 수있는 찾기 및 바꾸기 텍스트 유틸리티입니다.

http://sourceforge.net/projects/fart-it/


쉘과 같은 * nix를 실제로 사용할 수 없다면 종속성이없는 작은 독립형 exe이기 때문에 이것을 선호합니다.
Qben


6

Cygwin을 사용 합니다 . Cygwin 바이너리를 PATH에 넣으면 Windows Command 셸 내에서 사용할 수 있다는 것을 모르는 많은 사람들이 있습니다. Cygwin 's Bash를 실행할 필요가 없습니다.

Microsoft에서 구할 수있는 Unix 용 Windows 서비스를 살펴볼 수도 있습니다 (단, Professional 및 위 버전의 Windows에서만 가능).


4

에 들린 또는 편집

또한 Windows 용 많은 유닉스 도구와 함께 제공되는 Windows Services for Unix가 있습니다. http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx

12/7/12 업데이트 Windows 2003 R2, Windows 7 및 Server 2008 등에서 위의 내용은 추가 기능으로 SUA (UNIX 기반 응용 프로그램 용 하위 시스템)로 대체되었습니다. 그러나 다음 유틸리티를 다운로드해야합니다. http://www.microsoft.com/en-us/download/details.aspx?id=2391


5
둘 다 64 비트 버전의 Windows에는 더 이상 존재하지 않습니다.
Joey


3

Windows 용 도우미 배치 파일 repl.bat에는 SED 기능 doesn't require any additional download이나 설치 기능을 많이 가지고 있습니다. 사용이하는 하이브리드 배치 파일입니다 Jscript기능을 구현하는 등입니다 swiftdoesn't suffer from the usual poison characters일괄 처리와 핸들 쉽게 빈 줄을의.

다운로드 repl-https: //www.dropbox.com/s/qidqwztmetbvklt/repl.bat

저자는 stack overflow 및 dostips.com의 @dbenham입니다.

라는 또 다른 도우미 배치 파일 findrepl.bat은 Windows 사용자에게 많은 기능을 제공 GREP하며 또한Jscript 하이브리드 배치 파일을 하며 하이브리드 배치 파일입니다. repl.bat의 이점을 공유합니다

다운로드 findrepl-https: //www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

저자는 stack overflow 및 dostips.com의 @aacini입니다.


repl의 보관 용 링크가 다운되었습니다. 보조 링크가 있습니까?
Vishal Anand

2

내가 아는 한 sed는 창문에 묶여 있습니다. 그러나 sed는 전체 POSIX 하위 시스템을 원하는 경우 Cygwin의 일부로 또는 명령 줄에서 sed를 실행하려는 경우 Win32 기본 실행 파일로 포함하여 여러 다른 형태로 Windows에서 사용할 수 있습니다.

Windows 용 Sed (GnuWin32 프로젝트)

Windows 고유의 언어이어야하는 경우 VBScript와 같은 추가 기능없이 Windows에서 지원하는 스크립팅 언어를 사용하는 것이 좋습니다.


1

Cygwin은 작동하지만 이러한 유틸리티도 사용할 수 있습니다. 드라이브에 파일을 넣고 디렉토리를 경로에 넣으면 친숙한 유닉스 유틸리티가 많이 있습니다. Cygwin이라는 경량 IMHO (그것도 잘 작동합니다).


0

Windows cmd.exe 프롬프트에서 작동하는 sed 도구가 필요했습니다. Eric Pement의 sed 포트 는 단일 DOS .exe에 적합합니다.

꽤 잘 문서화되어 있습니다.


1
문제는 DOS에 관한 것이 아니라 Windows (cmd.exe)에 관한 것입니다
a_horse_with_no_name

@royhowie : 알겠습니다. 이 답변 중 일부는 누군가에게 유용 할 수 있지만 질문 자체가 실제로는 적합하지 않다는 데 동의합니다. OTOH, 도매 삭제를 권장 할 자격이 없습니다.
PM 2Ring

이 상황에서 필수 부분은 링크 된 페이지에서 호스팅되는 .exe 파일이기 때문에 대답의 필수 부분을 포함하기가 어렵다고 생각합니다. 나는 링크 로트에 대한 걱정을 완전히 이해하고 있으며, 이것을 어떻게 SO에 포함시킬 수 있는지 잘 모르겠습니다.
bryan kennedy

캐치 a_horse_with_no_name에 감사드립니다. 나는 내 언어로 조잡했다. 지적한 문제를 해결하기 위해 내 의견을 편집했습니다.
bryan kennedy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.