Каким регулярным выражением можно записывать регистрационные записи хоста DHCP?

Некоторые пользовательские данные вашего браузера находятся в /home(, например. ~/.config/chromium/или ~/.cache/google-chrome/), поэтому он работает на вашем жестком диске. Установка его на ssd должна увеличить вашу производительность.

1
28.05.2021, 16:37
2 ответа

С 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, поэтому нам просто нужно написать DSL, чтобы мы могли оценить файл как скрипт Tcl:

#!/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
10
28.07.2021, 11:28

Следующие строки Perl one -, кажется, почти выводят то, что вы хотите:

perl -ane 'print $F[-1] =~ s/[";]//gr unless /[{}]/; print /^$/ ? "\n" : " "'

но я боюсь, что ввод может содержать разделы, которые вы хотите полностью пропустить,поэтому требуется дополнительная настройка:

perl -ane 'if (/host/.. /}/) {
               print $F[-1] =~ s/[";]//gr unless /[{}]/;
               print /}/ ? "\n" : " "
           }'

что означает

  • если мы находимся между строками, содержащими hostи }, мы обрабатываем ввод, иначе пропускаем его.
  • если текущая строка не содержит фигурных скобок, выводим последнее слово, удалив из него точку с запятой и двойные кавычки
  • если в строке есть закрывающая фигурная скобка, печатаем новую строку, иначе пробел.
5
28.07.2021, 11:28

Теги

Похожие вопросы