是否有像cmd.exe的sed工具?

Jak*_*urc 143 windows cmd sed

我想使用Windows命令行(cmd.exe)以编程方式编辑文件内容.在*nix中有这个任务的sed.在Windows中有没有有用的等价物?

编辑:我正在寻找本机命令行解决方案.

Jak*_*urc 112

今天powershell救了我.

因为grep有:

get-content somefile.txt | where { $_ -match "expression"}
Run Code Online (Sandbox Code Playgroud)

而且sed有:

select-string somefile.txt -pattern "expression"
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅Zain Naboulsis博客文章.

  • 另外:如果你想从普通cmd调用它,只需@powershell -Command"get-content ..."就可以了.唯一需要注意的是,你必须使用引号:•-Command"get-content ... \"expression \",..." (12认同)
  • @and-bri (Get-Content c:\temp\test.txt).replace('[MYID]', 'MyValue') | 设置内容 c:\temp\test.txt (4认同)
  • @JakubŠturc 你提出的替换 `sed` 的解决方案对我不起作用。我用这个代替,它工作得很好: `(Get-Content myFile.txt) -replace 'foo', 'bar' | Out-File -encoding ASCII myFile.txt`(这是为了将整个文件中的文本“foo”替换为文本“bar”。这取自/sf/answers/1469940811/ (3认同)
  • 我今天在一个文件上尝试了这个以删除某些地方引号之间的一些东西,结果发现输出的文件几乎是原始文件的两倍。原因似乎是这种方法改变了在文件中处理换行符的方式,以使用“\r\n”而不是“\n”。 (2认同)
  • 由于 \r\n 而加倍意味着您的文件纯粹由换行符组成。这是真正的原因:[编码](http://stackoverflow.com/questions/21374118/size-of-the-sorted-file-is-double-than-original-file-in-powershell)。 (2认同)

b w*_*b w 87

sed (及其同类)包含在几个Unix命令包中.

如果您不想安装任何东西并且您的系统不是Windows Server,那么您可以使用脚本语言(例如VBScript).下面是一个粗略的,袖手旁观的刺.你的命令行看起来像

cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt
Run Code Online (Sandbox Code Playgroud)

其中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
Run Code Online (Sandbox Code Playgroud)

  • GnuWin32 _is_是一个原生解决方案,如果是本机你的意思是设计为在"正常"的Windows环境中运行(与CygWin不同).给他们一个尝试,你会开始期待他们在你使用的每个Windows系统上.! (7认同)
  • 如果这是"袖手旁观",请想知道你的其他代码是什么样的!太棒了,谢谢. (4认同)
  • 适合我的情况!另外,不要忘记"// NoLogo"cscript选项. (3认同)
  • 可以使用JScript完成类似的正则表达式搜索和替换实用程序.JScript优于VBScript的优点是可以在单个脚本中轻松地与批处理结合使用,使得实用程序更易于在批处理或命令行上下文中使用.[可以使用称为REPL.BAT的强大的混合JScript /批处理实用程序](http://stackoverflow.com/a/16735079/1012053).它有许多命令行选项.完整文档嵌入在脚本中.它当然没有完整的sed功能,但即便如此,它也非常强大. (2认同)

Ada*_*hes 23

UnxUtils为Win32提供sed,GNUWin32也是如此.


小智 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
Run Code Online (Sandbox Code Playgroud)

你运行它是这样的:

cscript replace.vbs "C:\One.txt" "Robert" "Rob"
Run Code Online (Sandbox Code Playgroud)

这类似于"bill weaver"提供的sed版本,但我认为这个特殊('> </)字符更友好.

顺便说一句,我没有写这个,但我不记得我从哪里得到它.


Rob*_*Kam 9

Super Sedsed的增强版本.对于Windows,这是一个独立的.exe,用于从命令行运行.


Col*_*lls 7

试试fart.exe.它是一个可以在命令批处理程序中使用的查找和替换文本实用程序.

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


小智 7

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

这是行为

sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
Run Code Online (Sandbox Code Playgroud)

  • 它完美地工作。注意:“get-content”上的括号确保以后调用“set-content”时文件不会被使用。 (2认同)

rob*_*ntw 6

您可以安装Cygwin(http://www.cygwin.com/)并从那里使用sed.


小智 6

你可以试试powershell.有获得内容设置内容命令行开关建立,你可以使用.

  • 这些可能是PowerShell中对"sed"所做的最少贡献的两件事;-).`-replace`运算符可能是一个更好的建议. (4认同)

Bra*_*tte 6

我用Cygwin.我遇到很多人没有意识到,如果你把Cygwin二进制文件放在你的PATH上,你可以在Windows Command shell中使用它们.你不必运行Cygwin的Bash.

您也可以查看Microsoft提供的Windows Services for Unix(但仅限于Professional及以上版本的Windows).


Boo*_*Boy 5

edlin 或编辑

另外还有 Windows Services for Unix,它附带了许多用于 Windows 的 Unix 工具。 http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx

更新 12/7/12 在 Windows 2003 R2、Windows 7 和 Server 2008 等中,上述内容被作为附加组件的基于 UNIX 应用程序的子系统 (SUA) 所取代。但您必须下载实用程序: http://www.microsoft.com/en-us/download/details.aspx ?id=2391

  • 两者在 64 位版本的 Windows 上都不再存在。 (6认同)

fox*_*ive 5

有一个名为 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下载

替代链接 - https://www.dostips.com/forum/viewtopic.php?f=3&t=6044

作者是来自 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