/etc/hosts
少なくとも、次のサーバーを含める必要があるホストのファイルを探しています。
mobile.example.com
more.mobile.example.com
example.comの代わりに
次のワイルドカードを使用して検索したいと思います。
sed
// awk
// find
/単語はgrep
次word.word.word < path/to/inputfile > path/to/outputfile
のように構成されています。[A-Z, a-z, 0-9]
これを行うには、「sed」、「awk」、「find」、または「grep」コードを記述します。
答え1
/etc/hosts
各IPアドレスエントリには1つ以上のホスト名がある可能性があるため、各ホスト名(つまり、最初のフィールドを除くすべてのエントリ)を調べて、2つ以上の文字が含まれていることを確認する必要があります.
。
たとえば、
awk '{for (f=2;f<=NF;f++) {if (split($f,array,/\./)>2) {print;last}}}' /etc/hosts
または、読みやすくするために改行とインデントを追加します。
awk '
{
for (f=2;f<=NF;f++) {
if (split($f,array,/\./) > 2) {
print;
last;
}
}
}' /etc/hosts
これにより、リテラル文字が2つ以上の/etc/hosts
ホスト名を含むすべての行が印刷されます。.
入力行の各フィールドを繰り返し、awkの機能を使用してsplit()
文字ごとに分割します。.
区切り文字で要素に分割された文字列は、常に区切り文字の数よりも要素が1つ多いため、代わりに> 2
テストする必要があります>= 2
。たとえば、「example」にはそれ自体要素があります。 「example.com」には2つの要素(「example」と「com」)があります。 "mobile.example.com"には3つあります。
split()
また、文字列を配列に分割しますが、この操作では戻り値(要素数)にのみ興味があり、配列は無視されます。
スクリプトが見つかったら一つホスト名には複数の.
文字が含まれており、行全体を印刷してforループから外して(使用last
)、次の入力行に移動します。
答え2
実際にあなたのコメントを読むと、実際にはホストファイルではなくドメイン名のリストなので、少なくとも2つの点ですべての行をフィルタリングするようです。
grep '\..*\.' hostfile
ドメインが行の先頭にあることが重要な場合は、次を使用してください。
grep '^[[:alnum:]]*\..*\.' hostfile