削除

2016-03-26 6 views
0

私はmyfnames.txtと呼ばれるファイルを持っており、それは以下FF含まれています削除

00000001 
00000002 
00000004 
00000005 
00000010
私は大手の0を削除したい

ではなく、私は「0 00000010.上

Trimstart('0')を使用しようとしていますが、それは動作しないようです。

答えて

1

ただ、そうのように置き換える正規表現を使用します。

Get-Content myfnames.txt | % {$_ -replace '^0+', ''} | Set-Content NewFile.txt 
+0

ありがとうございます!私はすでにすべてを配列に配置し、それをループしてtrimstartを使用するプロセスに入っていましたが、これは簡単です:) –

1

一つの方法は、単純に整数に値をキャストすることです:

$f = 'C:\path\to\myfnames.txt' 
(Get-Content $f) | ForEach-Object { [int]$_ } | Set-Content $f 

他の方法は@DaveSextonは(ForEach-Object ISN」を提案し-replaceオペレータですオペレータはGet-Contentが返す配列に直接使用できるので、ここで必要です):

$f = 'C:\path\to\myfnames.txt' 
(Get-Content $f) -replace '^0+' | Set-Content $f 

またはあなたがしようとしたと述べTrimStart()方法:v3のため、PowerShellが自動展開をサポートしているので

$f = 'C:\path\to\myfnames.txt' 
(Get-Content $f).TrimStart('0') | Set-Content $f 

$f = 'C:\path\to\myfnames.txt' 
(Get-Content $f) | ForEach-Object { $_.TrimStart('0') } | Set-Content $f 

あなたは、少なくともPowerShellをお持ちの場合は、これに後者を簡素化することができV3配列のメンバーを呼び出すことで、配列のメンバーのメソッドを透過的に呼び出すことができます。 v3以前では、配列がアンロールされず、配列オブジェクト自体にメソッドTrimStart()がないため、エラーが発生します。


サイドノート:いずれかの方法、あなたはそれを読み込み(およびクローズ)ように、バックあなたは括弧でGet-Contentを実行する必要が同じファイルに変更されたデータを書き込みたい場合は、ファイル全体渡す前にデータをパイプラインに送ります。さもなければ、Set-Contentはまだ読み込み中にファイルに書き込みを試みますが、失敗するでしょう。