我在文本文件中有一个网址列表
我想把域名拉出来。
运行以下内容:
<div class="content-wrapper" ng-repeat="movieGroup in movieGroups">
<div class="content" ng-repeat="movie in movieGroup">
<button ng-click="movieGroup.selectedMovie = movie;">{{ movie.title }}</button>
</div>
<content-template movie="movieGroup.selectedMovie"></content-template>
</div>
它会生成此错误:
(Get-Content "c:\temp\test.txt") | ForEach-Object {$url = New-Object System.uri $_;$url.Host} > d:\test.txt
文本文件只是那个域(只是域,而不是域后面的路径)一遍又一遍。
关于我在哪些地方捣乱的想法?
示例文件:
New-Object : Exception calling ".ctor" with "1" argument(s): "Invalid URI: The format of the URI could not be determined."
答案 0 :(得分:3)
By definition,URI以方案(通常是协议,例如http
)开头。因此,.Net URI constructor期望字符串以协议开头。例如,http://www.example.com
。如果您传入Invalid URI
等
www.example.com
例外
答案 1 :(得分:1)
好的,djs给出了一个答案,说明你为什么做的不起作用,而Buxmaniak就如何通过URI对象和RegEx这两者做出了很好的功能性答案。我只是想发布一个适用于你提供的样本的简化版本......
Get-Content "c:\temp\test.txt" | %{[URI]"http://$_"} | Select -Expand Host | Set-Content D:\Test.txt
这会将http://添加到字符串的开头,并将其转换为URI。然后,它从每个URI对象扩展Host属性,并将其全部保存到您指定的文件中。
答案 2 :(得分:0)
这是基于[System.Uri] ...
的解决方案@((Get-Content -Path "C:\temp\text.txt") | ForEach-Object { if ($_.Trim()) { (New-Object -TypeName System.Uri ("http://{0}" -f (($_.Trim()) -replace "\\", "/"))).Host } } ) | Sort-Object -Unique
...或者如果你喜欢RegEx,你应该试试这个......
@((Get-Content -Path "C:\temp\text.txt") | ForEach-Object { if ($_ -match "^([\w\.-]*)") { $matches[1] } }) | Sort-Object -Unique
在这两种情况下,结果都是......
lrp.mxptint.net
lrpush.apxlv.com
lsa.measure.ly