web-dev-qa-db-ja.com

cmd.exeのsedのようなユーティリティはありますか?

Windowsコマンドライン( cmd.exe )を使用して、プログラムでファイルコンテンツを編集したい。 * nixには、このタスク用に sed があります。ウィンドウに有用な同等物はありますか?

編集:ネイティブコマンドラインソリューションを探しています。

142
Jakub Šturc

今日、powershellは私を救った。

grepには次のものがあります。

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

sedの場合:

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

詳細については、 Zain Naboulsisブログエントリ を参照してください。

109
Jakub Šturc

sed(およびそのilk)は、Unixコマンドのいくつかのパッケージに含まれています。

  • Cygwin は機能しますが、巨大です。
  • nxUtils ははるかにスリムです。
  • GnuWin32 は機能する別のポートです。
  • 別の選択肢は、AT&T Researchの WINシステム です。
  • MSYS MinGwのもう1つのオプションです。
  • Linux用Windowsサブシステム は最も「ネイティブ」なオプションですが、デフォルトではWindowsにインストールされません。ただし、sedgrepなどはそのまま使用できます。
  • https://github.com/mbuilov/sed-windows は、リストされている上位ポートとは異なり、 -zオプション をサポートする最新の4.3および4.4バージョンを提供します

何もインストールせず、システムがWindows Serverでない場合は、couldスクリプト言語(VBScriptなど)を使用しますそれ。下にあるのは、ひどい、すぐに使える刺し傷です。コマンドラインは次のようになります

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

ここで、oldpatとnewpatは Microsoft vbscript regex pattern です。明らかに、私は代替コマンドを実装していくつかのことを想定しましたが、よりスマートになり、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
87
b w

nxUtils は、Win32にsedを提供します GNUWin32 と同様です。

23
Adam Hughes

何もインストールしたくない場合(他のマシンで実行されるソリューション/プログラム/などにスクリプトを追加したい場合)、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"

これは「ビルウィーバー」が提供するsedバージョンに似ていますが、これは特殊( '> </)文字の点でより使いやすいと思います。

ところで、私はこれを書いていませんが、どこから入手したのか思い出せません。

17
Rober

Super Sed sedの拡張バージョンがあります。 Windowsの場合、これはスタンドアロンの.exeであり、コマンドラインから実行するためのものです。

9
Rob Kam

Fart.exeをお試しください。これは、コマンドバッチプログラムで使用できる検索および置換テキストユーティリティです。

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

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

これはの動作です

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

Cygwinをインストールして( http://www.cygwin.com/ )、そこからsedを使用できます。

6
robintw

PowerShellを試すことができます。 get-content および set-content コマンドレットビルドがあり、使用できます。

6
James Boother

Cygwin を使用します。 CygwinバイナリをPATHに配置すると、Windowsコマンドシェル内から使用できることに気付かない多くの人々に会います。 CygwinのBashを実行する必要はありません。

また、Microsoftから入手可能な Windows Services for Unix を検討することもできます(ただし、Professional以降のバージョンのWindowsのみ)。

6
Brandon DuRette

エドリンまたは編集

さらに、Windows用の多くのUNIXツールが付属しているWindows Services for 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

4
Booji Boy

repl.batと呼ばれるWindows用のヘルパーバッチファイルがあります。これは、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

作者はスタックオーバーフローとdostips.comの@dbenhamです

findrepl.batと呼ばれる別のヘルパーバッチファイルは、WindowsユーザーにGREPの機能の多くを提供し、Jscriptにも基づいており、同様にハイブリッドバッチファイルです。 repl.batの利点を共有します

findreplをダウンロード-- https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

著者は、スタックオーバーフローとdostips.comの@aaciniです。

3
foxidrive

GNU Tools を見ることができます。これらは(特に)ウィンドウにsedを提供します。

3
Linor

私の知る限り、sedにはウィンドウがバンドルされています。ただし、Windowsでは、完全なPOSIXサブシステムが必要な場合はCygwinの一部として、コマンドラインでsedを実行する場合はWin32ネイティブ実行可能ファイルなど、さまざまな形式でsedを使用できます。

Sed for Windows(GnuWin32プロジェクト)

Windowsにネイティブである必要がある場合、VBScriptなど、アドオンなしでWindowsでサポートされているスクリプト言語を使用することをお勧めします。

2
Jay

Cygwinは動作しますが、 これら ユーティリティも利用可能です。それらをドライブに置いて、ディレクトリをパスに入れるだけで、多くの使いやすいUNIXユーティリティが手に入ります。 Cygwinのより軽量なIMHO(ただし、同様に機能します)。

1
Mark

これはVista Ultimateで機能しますが、Proについてはわかりません。

sed -f commandfilename.cmd file1 > file2
0
sparkkkey

Windows cmd.exeプロンプトで機能するsedツールが必要でした。 Eric Pementのsedの単一のDOS .exeへの移植 は、私にとってはうまくいきました。

それはかなりよく ドキュメント化された です。

0
bryan kennedy