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)는 여러 유닉스 명령 패키지에 포함되어 있습니다.
- 사이 그윈 은 효과가 있지만 거대합니다.
- 유닉스 유틸리티 는 훨씬 더 얇습니다.
- GnuWin32 는 작동하는 또 다른 포트입니다.
- 또 다른 대안은 AT & T Research의 UWIN 시스템입니다. 입니다.
- MSYSMinGw의 는 또 다른 옵션입니다.
- Linux 용 Windows 하위 시스템 은 가장 “기본”옵션이지만 기본적으로 Windows에는 설치되어 있지 않습니다. 그것은
sed
,grep
하지만 상자의 등을. - https://github.com/mbuilov/sed-windows 는 최신 4.3 및 4.4 버전을 제공하며 나열된 상위 포트와 달리
-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, 나는 이것을 쓰지 않았지만 어디서 왔는지 기억할 수 없다.
답변
이 슈퍼 Sed의는 나오지도의 향상된 버전. Windows의 경우 이것은 명령 행에서 실행하기위한 독립형 .exe입니다.
답변
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
이것은의 행동입니다
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt