删除文本文件中的前导0

时间:2016-03-26 07:28:33

标签: string powershell

我有一个名为Trimstart('0')的文件,它包含以下ff:

00000001
00000002
00000004
00000005
00000010

我想删除前导0而不是00000010上的0。

我正在尝试使用u,但似乎无法让它发挥作用。

2 个答案:

答案 0 :(得分:1)

只需使用正则表达式替换:

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

答案 1 :(得分:1)

一种方法是简单地将值转换为整数:

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

其他方式是-replace建议的ForEach-Object运算符,此处不需要Get-Content,因为运算符可以直接用于$f = 'C:\path\to\myfnames.txt' (Get-Content $f) -replace '^0+' | Set-Content $f 的数组返回):

TrimStart()

或您说过尝试的$f = 'C:\path\to\myfnames.txt' (Get-Content $f) | ForEach-Object { $_.TrimStart('0') } | Set-Content $f 方法:

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

如果您至少拥有PowerShell v3,则可以将后者简化为:

TrimStart()

因为v3 PowerShell支持自动展开数组,所以你可以通过在数组本身上调用它来透明地调用数组成员的方法。在v3之前,这会导致错误,因为数组未展开且数组对象本身没有方法Get-Content

旁注:无论哪种方式,如果您想将修改后的数据写回同一个文件,您需要在括号中运行Set-Content,以便它读取(并关闭)在将数据传递到管道之前的整个文件。否则// chart basics google.load('visualization', '1.0', {'packages':['timeline']}); google.setOnLoadCallback(drawChart); //begin our function function drawChart() { //container var container = document.getElementById('chart_div_23_36'); $.ajax({ url: 'https://gist.githubusercontent.com/vgrem/a32a35e5e22170e2c9f0/raw/950256440645ae5b506fb18547cbaa0261a1d5bc/data.json', dataType: "json", cache: false }).done(function(jsonData) { // Create our data table out of JSON data loaded from server. var data = new google.visualization.DataTable(jsonData); // Instantiate and draw our chart, passing in some options. var chart = new google.visualization.Timeline(container); chart.draw(data, { width: 924, height: 340, enableInteractivity : false, backgroundColor: '#fff', avoidOverlappingGridLines: false }); }).fail(function(error) { google.visualization.errors.addError(container, "Failed to load data for the chart."); }); } //end function会尝试写入仍在读取的文件,这会失败。