回答:
今日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)は、Unixコマンドのいくつかのパッケージに含まれています。
sed
、grep
等を持っています。-z
ます。これらは、リストされている上部ポートとは異なるオプションをサポートしています何もインストールしたくない場合や、システムがWindows Serverでない場合は、スクリプト言語(VBScriptなど)を使用できます。以下は、その場での大まかなオフカフスタブです。コマンドラインは次のようになります
cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt
ここで、oldpatとnewpatはMicrosoft vbscript regexパターンです。明らかに、私は代用コマンドを実装し、いくつかのことを想定しましたが、よりスマートになり、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
UnxUtilsは、Win32用のsedを提供し、GNUWin32も同様です。
何もインストールしたくない場合(他のマシンで実行されるソリューション/プログラムなどにスクリプトを追加したいと思います)、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バージョンに似ていますが、これは特殊( '> </)文字の点でよりフレンドリーだと思います。
ところで、私はこれを書きませんでしたが、どこから取得したのか思い出せません。
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
これは
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
powershellを試すことができます。あります。get-コンテンツとのセット内容は、使用できることでコマンドレットのビルド。
sed
影響を与えるかはほとんどありません;-)。-replace
オペレータは、おそらくより良い提案です。
fart.exeを試してください。これは、コマンドバッチプログラムで使用できる検索および置換テキストユーティリティです。
Cygwin(http://www.cygwin.com/)をインストールして、そこからsedを使用できます。
Cygwinを使用します。CygwinバイナリをPATHに置いた場合、Windowsコマンドシェル内からそれらを使用できることを理解していない多くの人に出くわします。CygwinのBashを実行する必要はありません。
Microsoftから入手できるUnix用のWindowsサービスを調べることもできます(ただし、Professional以上のバージョンのWindowsでのみ)。
エドリンまたは編集
さらに、Windows用の多くのUNIXツールに付属するUnix用のWindowsサービスがあります。 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
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
作者はスタックオーバーフローとdostips.comの@dbenhamです
呼び出される別のヘルパーバッチファイルfindrepl.bat
は、Windowsユーザーに多くの機能を提供します。GREP
また、それに基づいてJscript
おり、ハイブリッドバッチファイルでもあります。repl.batの利点を共有します
ダウンロードfindrepl
から- https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
作者はスタックオーバーフローとdostips.comから@aaciniです
私が知る限り、sedのようなものはWindowsにバンドルされていません。ただし、完全なPOSIXサブシステムが必要な場合はCygwinの一部として、コマンドラインでsedだけを実行したい場合はWin32ネイティブ実行可能ファイルとして、sedをWindowsで使用できます。
Sed for Windows(GnuWin32プロジェクト)
それがWindowsにネイティブである必要がある場合、私が提案できる他の唯一のことは、VBScriptなどのアドオンなしでWindowsによってサポートされるスクリプト言語を使用することです。
Windowsのcmd.exeプロンプトで機能するsedツールが必要でした。Eric Pementの単一のDOS .exeへのsedの移植は、私にとってはうまくいきました。