174

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

4

16 に答える 16

148

今日、powershell が私を救ってくれました。

grepあるからです:

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

また

select-string somefile.txt -pattern "expression"

そして、次のsedとおりです。

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

Replace PowerShell 関数の詳細については、この Microsoft の記事を参照してください。

于 2011-05-17T09:35:12.447 に答える
105

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

何もインストールする必要がなく、システムが 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
于 2008-09-24T14:37:54.360 に答える
23

UnxUtilsは、 GNUWin32と同様に、Win32 用の sed を提供します。

于 2008-09-24T14:05:15.420 に答える
18

何もインストールしたくない場合 (他のマシンで実行されるソリューション/プログラム/etc にスクリプトを追加することを想定しています)、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 バージョンに似ていますが、特殊な (' > </ ) 文字に関してはこちらの方が使いやすいと思います。

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

于 2011-04-20T10:38:50.983 に答える
12
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt

これはの動作です

sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
于 2013-11-05T12:35:37.053 に答える
10

sed の拡張版であるSuper Sedがあります。Windows の場合、これはスタンドアロンの .exe であり、コマンド ラインから実行することを目的としています。

于 2009-05-26T17:49:20.830 に答える
8

PowerShellを試すことができます。使用できるget- contentコマンドレットとset-contentコマンドレットが組み込まれています。

于 2008-09-24T14:11:24.860 に答える
7

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

また、Microsoftから入手できるUnix用のWindowsサービスを調べることもできます(ただし、Professional以降のバージョンのWindowsのみ)。

于 2008-09-24T14:11:32.177 に答える
7

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

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

于 2012-07-18T21:23:21.863 に答える
6

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

于 2008-09-24T14:03:12.633 に答える
4

edlinまたは編集

さらに、Windows 用の多くの UNIX ツールに付属する Windows Services for Unix があります。 http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx

Update 12/7/12 Windows 2003 R2、Windows 7 & Server 2008 などでは、上記はアドオンとして UNIX ベース アプリケーション用サブシステム (SUA) に置き換えられます。ただし、ユーティリティをダウンロードする必要があります: http://www.microsoft.com/en-us/download/details.aspx?id=2391

于 2008-09-24T14:03:27.297 に答える
3

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

著者は、スタック オーバーフローおよび dotips.com の @dbenham です。

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

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

著者は、スタック オーバーフローおよび dotips.com の @aacini です。

于 2013-11-05T13:04:14.927 に答える
3

GNU Toolsを見ることができます。それらは (とりわけ) sed on windows を提供します。

于 2008-09-24T14:03:38.840 に答える
2

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

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

Windowsにネイティブである必要がある場合、私が提案できる他の唯一のことは、VBScriptなどのアドオンなしでWindowsでサポートされているスクリプト言語を使用することです。

于 2008-09-24T14:08:31.887 に答える
1

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

于 2008-09-24T14:06:43.653 に答える
0

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

それはかなりよく文書化されています。

于 2013-04-24T15:17:37.420 に答える