検索する必要がある500文字以上の文字列のリストがあります。 (URLは重要ですが)私は1,000以上のWebページを持つWebサイトを持っています。私は、それぞれのWebページを検索して、それぞれがリンクしているURLを探したいと思います。複数のファイルを複数の文字列で検索する方法
私たちのWebサイトがUnixの箱に入っていたとき、これを達成するためにfindとgrepを使って小さなシェルスクリプトを書いたのですが、今はWindowsマシン上にあるので、実際にはオプションではありません。私はPowerShellの経験は全くありませんが、これが私の必要と思うものです。しかし、私はどのように始めるのか分かりません。私はで終わるしたいものを
理想的には、このようなものです:私は行番号を知っている必要はありません
<filename 1>
<1st string found>
<2nd string found>
<3rd string found>
<filename 2>
<1st string found>
<2nd string found>
。私はちょうどどのURLがどのファイルであるか知る必要があります。 (すべての500以上のターゲットURLを新しい場所に移動する予定であるため、1,000以上のウェブページのリンクを手動で更新する必要があります)。
おそらく論理は次のようなものになります。
for each file {
print the filename
for each string {
if string found in file {
print the string
}
}
}
Webページがコンテンツ管理システムにあるため、検索/置換を直接行うことはできません。私たちができることは、どのページを更新する必要があるのか(ローカルドライブ上のWebページの静的なコピーを使用して)を見つけてから、CMSの個々のページを手動で更新するだけです。
私はこれがやりやすいと思っていますが、PowerShellの使い慣れていないことはどこから始めるのか分かりません。どんな助けでも大歓迎です!
更新
助けを借りてくれたTravis Plunkに感謝します!彼の答えに基づいて、ここで私が使用するコードの最終バージョンがあります。
# Strings to search for
$strings = @(
'http://www.ourwebsite.com/directory/somefile.pdf'
'http://www.ourwebsite.com/otherdirectory/anotherfile.pdf'
'http://www.otherwebsite.com/directory/otherfile.pdf'
)
# Directory containing web site files
cd \OurWebDirectory
$results = @(foreach($string in $strings)
{
Write-Host "Searching files for $string"
# Excluding the images directory
dir . -Recurse -Exclude \imagedir | Select-String -SimpleMatch $string
}) | Sort-Object -Property path
$results | Group-Object -Property path | %{
"File: $($_.Name)"
$_.Group | %{"`t$($_.pattern)"}
}
を、あなたはエンドをスクレイピングしていますユーザーが見ることができるページ( 'body'のみのようなもの)または完全なHTMLコンテンツそのもの? ((編集:これは重要なのは、完全なHTMLを保存し、すべての 'href'フィールドで検索する必要があるからです))。 – gravity
[Findstr](https://technet.microsoft.com/en-us/library/bb490907.aspx)? – n00dl3
私はHTMLファイル自体にローカルディスクアクセスを持っているので、画面のスクラップやウェブのクロールは必要ありません。 –