altere a tabela de concessões DHCP com script e sed

0

Dears,

Eu tenho nas concessões de arquivos de concessão do dhcp, como no exemplo a seguir:

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 "
#!/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}    
14271
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 "
#!/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}    
14271%pre%02"; option agent.circuit-id 0:17; option agent.remote-id c0:a8:9:5; client-hostname “android-8182e21c852776e7";
02"; option agent.circuit-id 0:17; option agent.remote-id c0:a8:9:5; client-hostname “android-8182e21c852776e7";

Eu preciso poder alterar a opção agent.remote-id valores fixos para uma string antes de enviar esse arquivo para outro lugar usando, e também, se possível, converter o campo circuit-id em binário a partir do hex. Pensando na primeira coisa a fazer, eu tentei fazer um script como segue, mas não está funcionando:

%pre%     
por Abood Alakhras 01.09.2016 / 12:30

1 resposta

1

Seu primeiro problema é que as strings em suas atribuições de variáveis usam caracteres de aspas não-ASCII. Por causa disso, sed está tentando corresponder “c0:a8:9:2” em vez de c0:a8:9:2 .

Além disso, eu realmente não vejo o ponto de definir um monte de variáveis para isso; IMHO seria mais limpo usar um aqui documento , por exemplo

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

Você poderia colocar as linhas s/c0:a8:9:2/AOD-ADMIN-OFFICE/ em um arquivo de comando separado e chamá-lo com sed -f cmdfile /var/lib/dhcp/dhcpd.leases se isso facilitar a manutenção da tabela, ou seja,

Em cmdfile (ou qualquer nome que você escolha para chamá-lo):

# 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/

depois no seu script

sed -f cmdfile /var/lib/dhcp/dhcpd.leases
    
por steeldriver 01.09.2016 / 14:50