Regex awk para a interface Cisco

-1

Eu gostaria de saber se tenho algum regex Sed / Grep ou Awk para analisar a seção de interface Cisco, com um atributo específico, como abaixo.

Conteúdo do arquivo.txt

!
interface FastEthernet0/1
 no ip unreachables
!
interface FastEthernet0/2
 no ip proxy-arp
!

Script:

#!/bin/bash
VALUE="no ip proxy-arp"
awk -v RS='!\n' -v PATTERN=${VALUE} '/$PATTERN/' file.txt | awk '/^interface/';
exit 0

O problema é quando eu corro linha diretamente do shell, funciona, mas quando eu executo o script, ele não funciona.

Em execução com bash -x , posso ver que awk não pode substituir o valor da variável.

Alguma sugestão?

    
por Robert 11.04.2013 / 19:47

2 respostas

3

Difícil acreditar que isso funcione no seu shell. No entanto, este código contém vários erros e também tem a abordagem errada IMHO.

o awk espera uma string entre // não uma variável. Estas são expressões regulares constantes. Então você faz o shell colocar a variável lá ou você usa ~ .

Sua abordagem com correções:

awk -v RS='!\n' -v PATTERN="${VALUE}" '$0 ~ PATTERN' file.txt | 
  awk '/^interface/'

Estou surpreso que isso funcione. Da documentação eu esperava que, devido à configuração do RS, um "!" Indesejado seria impresso. No entanto, eu considero este melhor:

awk -v PATTERN="${VALUE}" \
  '$0 ~ PATTERN { print previousline; }; { previousline=$0; }' file.txt

ou com padrão codificado

awk '/no ip proxy-arp/ { print previousline; }; { previousline=$0; }' file.txt

ou com o shell escrevendo o padrão

awk /"$VALUE"/' { print previousline; }; { previousline=$0; }' file.txt
    
por 12.04.2013 / 05:57
-1
echo "!
interface FastEthernet0/1
 no ip unreachables
!
interface FastEthernet0/2
 no ip proxy-arp
"  | pcregrep -M "^interface .*0/1\n (.*\n)!"

resultado:

interface FastEthernet0/1
 no ip unreachables
    
por 09.12.2018 / 02:20