DHCPホスト登録履歴をキャプチャする正規表現は何ですか?

DHCPホスト登録履歴をキャプチャする正規表現は何ですか?

DHCP ホスト登録履歴をキャプチャするには正規表現が必要です。

分析する必要がありますdhcpd 構成ファイル可能であれば、ファイルまたはBash配列としてキャプチャされるすべてのホスト予約用のファイルです。したがって、ホスト予約を次のように定義すると、

    host Service-Ethernet {
        hardware ethernet 11:11:11:11:11:11;
        fixed-address 192.168.0.3;
        option host-name "service";
    }

    host Service-Wifi {
        hardware ethernet 22:22:22:22:22:22;
        fixed-address 192.168.0.4;
    }

    host Test {
        hardware ethernet 33:33:33:33:33:33;
        fixed-address 192.168.0.5
        option host-name "test";
    }

ファイルまたはBash配列に出力...

11:11:11:11:11:11, 192.168.0.3, service
22:22:22:22:22:22. 192.168.0.4,
, 192.168.0.5, test

3つのパラメータのいずれかが欠落している場合は、空白のままにしてください。

式を1行ずつ適用する必要がありますが、これはまだ許可されています。もちろん、Bashスクリプトで式をラップし、構成ファイルを1行ずつ読み取ることもできます。

ベストアンサー1

parse_dhcp.awkアクションとして

#!/usr/bin/env awk -f

function output() {
    printf "%s, %s, %s\n", hw, fa, opt
}

$1 == "host" {
    if (NR > 1) output()
    hw = fa = opt = ""
    next
}

{sub(/;$/, "")}
$1 == "hardware"      {hw = $NF}
$1 == "fixed-address" {fa = $NF}
$1 == "option"        {opt = $NF; gsub(/"/, "", opt)}

END {output()}

それから

awk -f parse_dhcp.awk dhcp.conf

状況をより明確にするために、ファイルは有効なTcl構文であるため、ファイルをTclスクリプトとして評価できるようにDSLを作成するだけです。

#!/usr/bin/env tclsh

proc host {name data} {
    global vars
    array set vars {hardware "" fixed-address "" option ""}
    eval $data
    puts "$vars(hardware), $vars(fixed-address), $vars(option)"
}

proc unknown {cmd args} {
    global vars
    set vars($cmd) [lindex $args end]
}

set file [lindex $argv 0]
source $file

そして

tclsh parse_dhcp.tcl dhcp.conf

おすすめ記事