Windows 명령 줄 ( cmd.exe )을 사용하여 프로그래밍 방식으로 파일 내용을 편집하고 싶습니다 . * nix에는 이 작업을위한 sed 가 있습니다. Windows에 유용한 기본 기능이 있습니까?
Windows 명령 줄 ( cmd.exe )을 사용하여 프로그래밍 방식으로 파일 내용을 편집하고 싶습니다 . * nix에는 이 작업을위한 sed 가 있습니다. Windows에 유용한 기본 기능이 있습니까?
답변:
오늘 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 블로그 항목을 참조하십시오 .
sed
(및 그 ilk)는 여러 유닉스 명령 패키지에 포함되어 있습니다.
sed
,grep
하지만 상자의 등을.-z
옵션 을 지원합니다아무것도 설치하지 않고 시스템이 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
아무것도 설치하지 않으려면 (다른 컴퓨터에서 실행될 솔루션 / 프로그램 등에 스크립트를 추가한다고 가정합니다) 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, 나는 이것을 쓰지 않았지만 어디서 왔는지 기억할 수 없다.
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
이것은의 행동입니다
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
당신은 powershell을 시도 할 수 있습니다. 사용할 수 있는 get-content 및 set-content 커맨드 렛 빌드가 있습니다.
sed
;-) 에 가장 적게 기여하는 두 가지 일 것입니다 . -replace
운영자는 아마 더 좋은 제안입니다.
fart.exe를 시도하십시오. 명령 배치 프로그램에서 사용할 수있는 찾기 및 바꾸기 텍스트 유틸리티입니다.
Cygwin ( http://www.cygwin.com/ )을 설치 하고 sed를 사용할 수 있습니다.
Cygwin을 사용 합니다 . Cygwin 바이너리를 PATH에 넣으면 Windows Command 셸 내에서 사용할 수 있다는 것을 모르는 많은 사람들이 있습니다. Cygwin 's Bash를 실행할 필요가 없습니다.
Microsoft에서 구할 수있는 Unix 용 Windows 서비스를 살펴볼 수도 있습니다 (단, Professional 및 위 버전의 Windows에서만 가능).
에 들린 또는 편집
또한 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
Windows 용 도우미 배치 파일 repl.bat
에는 SED 기능 doesn't require any additional download
이나 설치 기능을 많이 가지고 있습니다. 사용이하는 하이브리드 배치 파일입니다 Jscript
기능을 구현하는 등입니다 swift
및 doesn'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입니다.
내가 아는 한 sed는 창문에 묶여 있습니다. 그러나 sed는 전체 POSIX 하위 시스템을 원하는 경우 Cygwin의 일부로 또는 명령 줄에서 sed를 실행하려는 경우 Win32 기본 실행 파일로 포함하여 여러 다른 형태로 Windows에서 사용할 수 있습니다.
Windows 고유의 언어이어야하는 경우 VBScript와 같은 추가 기능없이 Windows에서 지원하는 스크립팅 언어를 사용하는 것이 좋습니다.
Windows cmd.exe 프롬프트에서 작동하는 sed 도구가 필요했습니다. Eric Pement의 sed 포트 는 단일 DOS .exe에 적합합니다.
꽤 잘 문서화되어 있습니다.