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

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)는 여러 유닉스 명령 패키지에 포함되어 있습니다.

아무것도 설치하지 않고 시스템이 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


답변

UnxUtilsGNUWin32 와 마찬가지로 Win32 용 sed를 제공합니다 .


답변

아무것도 설치하지 않으려면 (다른 컴퓨터에서 실행될 솔루션 / 프로그램 등에 스크립트를 추가한다고 가정합니다) 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


답변

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