Изменить таблицу аренды DHCP с помощью script & sed

Уважаемые,

У меня есть в аренде файла аренды dhcp, как в следующем примере:

lease 192.168.79.15 {
  starts 0 2016/08/21 13:25:45;
  ends 0 2016/08/21 19:25:45;
  cltt 0 2016/08/21 13:25:45;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 8c:1a:bf:11:00:ea;
  uid "\001\214\032\277\021\000\352";
  option agent.circuit-id 0:17;
  option agent.remote-id c0:a8:9:5;
  client-hostname “android-8182e21c852776e7";

Мне нужно иметь возможность изменить фиксированные значения параметра agent.remote-id на строку перед отправкой этого файла в другое место, а также, если это возможно, преобразовать поле идентификатора цепи в двоичный код из шестнадцатеричного. Думая о первом, что я сделал, я попытался сделать скрипт следующим образом, но он не работает:

#!/bin/bash

VAR1=“/var/lib/dhcp/dhcpd.leases”
VAR2=“c0:a8:9:2”
VAR3=“c0:a8:9:3”
VAR4=“c0:a8:9:4”
VAR5=“c0:a8:9:5”
VAR6=“c0:a8:9:6”
VAR7=“c0:a8:9:7”


sed -e ’s/${VAR2}/AOD-ADMIN-OFFICE/g; s/${VAR3}/GOLF-MAINTENANCE-BUILDING/g; s/${VAR4}/MARINA-DRY-STACK/g;s/${VAR5}/DC-SERVICE-ROOM/g;s/${VAR6}/ACPM-ADMIN-OFFICE/g;s/${VAR7}/SEA-WATER-OFFICE/g’ ${VAR1}    

1 ответ

Решение

Ваша первая проблема заключается в том, что в строках ваших переменных назначаются не-ASCII символы кавычек. Из-за этого, sed пытается соответствовать “c0:a8:9:2” вместо c0:a8:9:2,

Кроме того, я не вижу смысла определять множество переменных для этого; ИМХО было бы чище использовать здесь документ, например

sed -f- /var/lib/dhcp/dhcpd.leases << 'EOF'
s/c0:a8:9:2/AOD-ADMIN-OFFICE/
s/c0:a8:9:3/GOLF-MAINTENANCE-BUILDING/
s/c0:a8:9:4/MARINA-DRY-STACK/
s/c0:a8:9:5/DC-SERVICE-ROOM/
s/c0:a8:9:6/ACPM-ADMIN-OFFICE/
s/c0:a8:9:7/SEA-WATER-OFFICE/
EOF

Вы могли бы вместо этого поставить s/c0:a8:9:2/AOD-ADMIN-OFFICE/ строки в отдельном командном файле, и вызвать его с sed -f cmdfile /var/lib/dhcp/dhcpd.leases если это облегчает обслуживание таблицы, т.е.

В cmdfile (или как вы его называете):

# list of agent.remote-id to physical location mappings
# for use in DHCP lease file processing script

s/c0:a8:9:2/AOD-ADMIN-OFFICE/
s/c0:a8:9:3/GOLF-MAINTENANCE-BUILDING/
s/c0:a8:9:4/MARINA-DRY-STACK/
s/c0:a8:9:5/DC-SERVICE-ROOM/
s/c0:a8:9:6/ACPM-ADMIN-OFFICE/
s/c0:a8:9:7/SEA-WATER-OFFICE/

тогда в вашем сценарии

sed -f cmdfile /var/lib/dhcp/dhcpd.leases
Другие вопросы по тегам