2016-11-08 4 views
0

から部分を引っ張る私はこのような$の一時中のURIのリストからちょうどこのPowerShellの - URI

hrbkr.com 
smqzc.com 
znynf.com 

を引くしようとしている -

anything.anything.hrbkr.com 
anything.anything.smqzc.com 
anything.anything.znynf.com 

この正規表現がで一致しているようですregex101に少なくとも -

(<domainname>(?<ip>^[A-Fa-f\d.:]+$)|(?<nodots>^[^.]+$)|(?<fqdomain>(?:(?:[^.]+.)?(?<tld>(?:[^.\s]{2})(?:(?:.[^\.\s][^\.\s])|(?:[^.\s]+)))))$)*?' 

しかし、これは私に何も結果が得られていないようです、私はそれが全体のラインに一致するように取得することができるが、私はちょうどトンをしたいです行が一致すれば彼は '部分文字列'ではなく真です。

$temp = ‘c:\Users\money\Downloads\phishinglist.txt’ 
$regex = '(<domainname>(?<ip>^[A-Fa-f\d.:]+$)|(?<nodots>^[^.]+$)|(? <fqdomain>(?:(?:[^.]+.)?(?<tld>(?:[^.\s]{2})(?:(?:.[^\.\s][^\.\s])|(?:[^.\s]+)))))$)*?' 
$temp | select-string -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } | Sort-Object -Unique > $list 
$list 

ありがとうございます!

+1

System.Uriクラスはhttp:// stac kobeflow.com/questions/14363214/get-domain-from-url-in-powershell –

答えて

4

ファイルのみのFQDNと何もが含まれている場合は、シンプル-split-join操作で簡単にそれを解決することができます。

# Split FQDN into individual labels 
$labels = 'anything.anything.smqzc.com' -split '\.' 

# Grab second-to-last and last label, join with a dot 
$domain = $labels[-2,-1] -join '.' 

または単一のステートメントで:

$domain = ("anything.anything.smqzc.com" -split '\.')[-2,-1] -join '.' 

だからあなたの手順次のようになります。

$list = Get-Content $HOME\Downloads\phishinglist.txt |ForEach-Object { 
    ($_ -split '\.')[-2,-1] -join '.' 
} 
+0

.com/net/orgのような単一の接頭辞を持つドメインでは動作しますが、2つの部分で接頭辞が正しく返されません。 bbc.co.uk or ausregistry.com.au –

+0

これは私が持っていたものより良いスタートアップのように見える、私はそれにtld配列でifステートメントを追加しますので、@ジェームズC.最後の3つをつかむ。それ以外の場合は、最後の2つを取得します。私はそれが動作すると思う...多くの多くのありがとう!私がそれを考え出すと、私はそれをここに戻すように挑戦します。 – JohnRain

関連する問題