我想这样做
现在我使用此脚本:
$file = [System.IO.File]::ReadLines("C:\path\to\some\file1.txt")
$output = "C:\path\to\some\file2.txt"
ForEach ($line in $file) {
if($line -match 'some_regex_expression') {
$line = $line.replace("some","great")
}
Out-File -append -filepath $output -inputobject $line
}
如您所见,我在这里一行一行地写。是否可以一次写入整个文件?
提供了很好的例子here:
(Get-Content c:\temp\test.txt) -replace '\[MYID\]', 'MyValue' | Set-Content c:\temp\test.txt
但是我的问题是我还有其他IF语句...
那么,我该怎么做才能改善脚本?
答案 0 :(得分:1)
您可以这样做:
Get-Content -Path "C:\path\to\some\file1.txt" | foreach {
if($_ -match 'some_regex_expression') {
$_.replace("some","great")
}
else {
$_
}
} | Out-File -filepath "C:\path\to\some\file2.txt"
默认情况下,Get-Content逐行读取文件(字符串数组),因此您可以将其通过管道传输到foreach循环中,处理循环中的每一行,然后将整个输出管道传输至file2.txt。
答案 1 :(得分:0)
在这种情况下,数组或数组列表(大型数组的列表更好)将是最优雅的解决方案。只需在数组中添加字符串,直到ForEach循环结束即可。之后,只需将数组刷新到文件即可。
这是数组列表示例
$file = [System.IO.File]::ReadLines("C:\path\to\some\file1.txt")
$output = "C:\path\to\some\file2.txt"
$outputData = New-Object System.Collections.ArrayList
ForEach ($line in $file) {
if($line -match 'some_regex_expression') {
$line = $line.replace("some","great")
}
$outputData.Add($line)
}
$outputData |Out-File $output
答案 2 :(得分:0)
我认为通过使用正则表达式组(例如salesorderdetails
和占位符(例如var entity = {};
entity["salesorderid@odata.bind"] = "/salesorders(B4B625A1-3789-E811-A967-000D3A1A9407)";
var req = new XMLHttpRequest();
req.open("POST", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/salesorderdetails", true);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function() {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 204) {
var uri = this.getResponseHeader("OData-EntityId");
var regExp = /\(([^)]+)\)/;
var matches = regExp.exec(uri);
var newEntityId = matches[1];
} else {
Xrm.Utility.alertDialog(this.statusText);
}
}
};
req.send(JSON.stringify(entity));
,if
等),在很多情况下都可以避免使用(.*)
语句。
如您的示例:
$1
对于很好的例子”,其中$2
可能是内联的:
(Get-Content .\File1.txt) -Replace 'some(_regex_expression)', 'great$1' | Set-Content .\File2.txt
(另请参见How to replace first and last part of each line with powershell)