3

httpd.conf ファイルから取り出したドメイン名のリストがあります。これらのドメイン名の形式は次のとおりです。

tld.com
cname.tld.com

これらのドメイン名のうち、TLD を共有するものはほとんどありません。

各ドメイン名の TLD のみのリストを出力しようとしていますが、STDOUT を操作して、指定された各文字列に対して tld.com だけを表示する方法がわかりません。

例えば。私のリストに次のものがあるとしましょう:

site1.com
site2.com
mail.site2.com
www.site3.com
site4.com

このリストから必要な結果は次のとおりです。

site1.com
site2.com
site2.com
site3.com
site4.com

これを行う方法について何か考えはありますか?

4

4 に答える 4

2

私はそれを考え出した:

 awk -F"." '{print $(NF-1)"."$NF}' /path/to/listfile
于 2013-01-16T22:23:27.200 に答える
1

テキストのパターンを見つけようとするときは、正規表現を考えてください。

このウィキペディアのページには、正規表現で使用する最も一般的な記号がリストされています。

ここで、TLDは一連*の非ドット([^.])、ドット(\.)、別の一連の非ドット([^.]*])、そして行の終わり($)です。これの正規表現は次のとおりです。

[^.]*\.[^.]*$

あなたはこのように使うことができます:

$ cat foo
site1.com
site2.com
mail.site2.com
www.site3.com
site4.com
$ grep -o '[^.]*\.[^.]*$' foo
site1.com
site2.com
site2.com
site3.com
site4.com
于 2013-01-16T22:07:40.193 に答える
1

これを試してください

rev <your file> | cut -d "." -f1-2 | rev | sort -u

説明:

ファイルが次の行で構成されている場合:

foo.com
bar.foo.com

最初のリビジョンは次のように変換します。

moc.oof
moc.oof.rab

次に、最初の 2 つのフィールドを選択して、もう一度逆にするだけです。ただし、これは 3 文字の tld でのみ機能します。のようなものでは機能しません.co.uk

CCTLD の更新:

#!/usr/local/bin/bash

# Usage ./foo.sh <file with FQDNS>

for i in `cat $1`
do
        j=`echo $i | rev | cut -d "." -f2`;
        if [ $j == "co" ]
        then
                # CCTLDs
                echo $i | rev | cut -d "." -f1-3 | rev >> $1.tmp
        else
                # 3 character TLD
                echo $i | rev | cut -d "." -f1-2 | rev >> $1.tmp
        fi
done
cat $1.tmp | sort -u
rm $1.tmp
于 2013-01-16T22:02:44.710 に答える
0
echo FQDN | rev | cut -d "." -f1 | rev

または、IP アドレスでも:

getent hosts IP |  rev | cut -d "." -f1 | rev
于 2015-07-31T14:05:22.640 に答える