Windowsコマンドライン( cmd.exe )を使用して、プログラムでファイルコンテンツを編集したい。 * nixには、このタスク用に sed があります。ウィンドウに有用な同等物はありますか?
編集:ネイティブコマンドラインソリューションを探しています。
今日、powershellは私を救った。
grep
には次のものがあります。
get-content somefile.txt | where { $_ -match "expression"}
sed
の場合:
get-content somefile.txt | %{$_ -replace "expression","replace"}
詳細については、 Zain Naboulsisブログエントリ を参照してください。
sed
(およびそのilk)は、Unixコマンドのいくつかのパッケージに含まれています。
sed
、grep
などはそのまま使用できます。-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
何もインストールしたくない場合(他のマシンで実行されるソリューション/プログラム/などにスクリプトを追加したい場合)、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バージョンに似ていますが、これは特殊( '> </)文字の点でより使いやすいと思います。
ところで、私はこれを書いていませんが、どこから入手したのか思い出せません。
Super Sed sedの拡張バージョンがあります。 Windowsの場合、これはスタンドアロンの.exeであり、コマンドラインから実行するためのものです。
Fart.exeをお試しください。これは、コマンドバッチプログラムで使用できる検索および置換テキストユーティリティです。
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
これはの動作です
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
Cygwinをインストールして( http://www.cygwin.com/ )、そこからsedを使用できます。
PowerShellを試すことができます。 get-content および set-content コマンドレットビルドがあり、使用できます。
Cygwin を使用します。 CygwinバイナリをPATHに配置すると、Windowsコマンドシェル内から使用できることに気付かない多くの人々に会います。 CygwinのBashを実行する必要はありません。
また、Microsoftから入手可能な Windows Services for Unix を検討することもできます(ただし、Professional以降のバージョンのWindowsのみ)。
エドリンまたは編集
さらに、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
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です。
GNU Tools を見ることができます。これらは(特に)ウィンドウにsedを提供します。
私の知る限り、sedにはウィンドウがバンドルされています。ただし、Windowsでは、完全なPOSIXサブシステムが必要な場合はCygwinの一部として、コマンドラインでsedを実行する場合はWin32ネイティブ実行可能ファイルなど、さまざまな形式でsedを使用できます。
Sed for Windows(GnuWin32プロジェクト)
Windowsにネイティブである必要がある場合、VBScriptなど、アドオンなしでWindowsでサポートされているスクリプト言語を使用することをお勧めします。
Cygwinは動作しますが、 これら ユーティリティも利用可能です。それらをドライブに置いて、ディレクトリをパスに入れるだけで、多くの使いやすいUNIXユーティリティが手に入ります。 Cygwinのより軽量なIMHO(ただし、同様に機能します)。
これはVista Ultimateで機能しますが、Proについてはわかりません。
sed -f commandfilename.cmd file1 > file2
Windows cmd.exeプロンプトで機能するsedツールが必要でした。 Eric Pementのsedの単一のDOS .exeへの移植 は、私にとってはうまくいきました。
それはかなりよく ドキュメント化された です。