按顺序,我必须:
1)从txt文件中获取所有链接
http://example1.htm
http://example2.htm
http://example3.htm
...
2)从每个链接获取来源
3)从源头获取我的字符串
4)将字符串导出到csv
它适用于一个链接。例如:
$topic1 = "kh_header.><b>((?<=)[^<]+(?=</b>))"
$topic2 = "<b>Numer ogłoszenia:\s([^;]+(?=;))"
Select-String -Path strona1.htm -pattern $topic1 | foreach-object {
$_.line -match $topic1 > $nul
$out1 = $matches[1]
}
Select-String -Path strona1.htm -pattern $topic2 | foreach-object {
$_.line -match $topic2 > $nul
$out2 = $matches[1]
}
echo $out1';'$out2';' | Set-content out.csv -force
,但我无法通过txt文件中的许多链接获取它。我试试看:
$topic = "kh_header.><b>((?<=)[^<]+(?=</b>))"
$topic2 = "<b>Numer ogłoszenia:\s([^;]+(?=;))"
$folder = Get-ChildItem e:\sk\html
ForEach ($htmfile in $folder){
If ($_.extension -eq ".htm"){
$htmfile = ForEach-Object {
$WC = New-Object net.webclient
$HTMLCode = $WC.Downloadstring($_.fullname)
}
Select-String -Path $HTMLCode -pattern $topic | foreach-object {
$_.line -match $topic > $nul
$out1 = $matches[1]
}
Select-String -Path $HTMLCode -pattern $topic2 | foreach-object {
$_.line -match $topic2 > $nul
$out2 = $matches[1]
}
echo $out1';'$out2';' | Set-content out.csv -force
}
}
我怎样才能得到它?
答案 0 :(得分:1)
默认情况下使用Select-String
时,它只会查找任何特定行的第一个匹配项。您可以使用AllMatches
参数来解决这个问题,例如:
foo.txt contains: "static void Main(string[] args)"
Select-String foo.txt -pattern '\W([sS]..)' -AllMatches |
Foreach {$_.Matches} |
Foreach {$_.Groups[1].Value}
此外,Select-String是面向行的,因此它不会在行之间找到模式匹配。为了找到这些,你需要在文件中读取一个字符串,例如:
$text = [io.file]::readalltext("$pwd\foo.txt")
然后使用一些特殊的正则表达式指令,例如:
$text | Select-String -pattern '(?si)\W([sS]..)' -AllMatches |
Foreach {$_.Matches} |
Foreach {$_.Groups[1].Value}