Manipulação de bloco de texto

1. Manipulação de bloco de texto

Felipe Peres da Silva
flips

(usa Debian)

Enviado em 01/04/2014 - 09:41h

Bom dia pessoal,

Estou precisando de uma ajuda para ajustar um script.

Faço backup dos meus switches da rede através de sftp, e o arquivo vem em um formato de texto com '#' como delimitador de bloco.

Estou tentando criar um script que leia o arquivo, e monte uma documentação de quais portas pertencem a quais vlans, vlans existentes e etc, porém não sei como fazer a separação do bloco de texto.

Ex:

#
interface GigabitEthernet1/0/1
linha 1
linha 2

#
interface GigabitEthernet1/0/2
linha 1

#
interface GigabitEthernet1/0/3
linha 1
linha 2
linha 3
linha 4

#
interface GigabitEthernet1/0/4
linha 1
linha 2


Sendo assim, preciso separar os blocos com "#" como delimitador...

A quantidade de linhas não segue um padrão, pois cada porta possui suas configurações.

Preciso por exemplo pegar todas as linhas que estão abaixo do "interface GigabitEthernet1/0/3", mas que seja no máximo até o próximo "#", que já indica o inicio da configuração da GigabitEthernet1/0/4.

Não sei se ficou bem claro o que eu preciso, aguardo respostas, e agradeço desde já pela atenção.



  


2. Re: Manipulação de bloco de texto

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 01/04/2014 - 10:32h

flips escreveu:

Bom dia pessoal,

Estou precisando de uma ajuda para ajustar um script.

Faço backup dos meus switches da rede através de sftp, e o arquivo vem em um formato de texto com '#' como delimitador de bloco.

Estou tentando criar um script que leia o arquivo, e monte uma documentação de quais portas pertencem a quais vlans, vlans existentes e etc, porém não sei como fazer a separação do bloco de texto.

Ex:

#
interface GigabitEthernet1/0/1
linha 1
linha 2

#
interface GigabitEthernet1/0/2
linha 1

#
interface GigabitEthernet1/0/3
linha 1
linha 2
linha 3
linha 4

#
interface GigabitEthernet1/0/4
linha 1
linha 2


Sendo assim, preciso separar os blocos com "#" como delimitador...

A quantidade de linhas não segue um padrão, pois cada porta possui suas configurações.

Preciso por exemplo pegar todas as linhas que estão abaixo do "interface GigabitEthernet1/0/3", mas que seja no máximo até o próximo "#", que já indica o inicio da configuração da GigabitEthernet1/0/4.

Não sei se ficou bem claro o que eu preciso, aguardo respostas, e agradeço desde já pela atenção.


Eu vou dar uma sugestão e vê aí se funciona. Substitua as quebras de linha por alguma sequência de caracteres que você realmente não usa no seu arquivo (eu recomendo "eichefevaitomarnocu"), para que efetivamente você acabe com um arquivo com uma única linha gigantesca. Aí você usa o cut pra separar os blocos de texto e depois desconverte a string (voltando ao exemplo, o "eichefevaitomarnocu") para quebras de linha. É gambiarra, mas não sei porque não funcionaria...


3. Re: Manipulação de bloco de texto

Felipe Peres da Silva
flips

(usa Debian)

Enviado em 01/04/2014 - 10:50h

Icarvalho..

Entendi sua resposta, mas não vejo como isso me ajudaria, pois preciso pegar as informações específicas de cada porta, exemplo:

for porta in $(cat startup.cfg |grep GigabitEthernet1/0/3 (aqui entraria o delimitador de bloco, sendo até o próximo '#')); do
porttype="port link-type hybrid"
vlantagged="port hybrid vlan 80 777 888 tagged"
vlanuntagged="port hybrid vlan 1 untagged"
portstatus="stp edged-port enable"

done

Seria +- isso, preciso passar em cada uma das portas, e pegar as linhas referentes as configurações dela.

Desta forma, a quebra de linha que você falou não seria útil, pois não sei quantas linhas posso pegar depois de cada "GigabitEthernet1/0/*", entendeu?

Algumas portas mostram apenas o tipo, outras tem vlans, tagged e untagged...


4. Re: Manipulação de bloco de texto

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 01/04/2014 - 10:53h

flips escreveu:

Icarvalho..

Entendi sua resposta, mas não vejo como isso me ajudaria, pois preciso pegar as informações específicas de cada porta, exemplo:

for porta in $(cat startup.cfg |grep GigabitEthernet1/0/3 (aqui entraria o delimitador de bloco, sendo até o próximo '#')); do
porttype="port link-type hybrid"
vlantagged="port hybrid vlan 80 777 888 tagged"
vlanuntagged="port hybrid vlan 1 untagged"
portstatus="stp edged-port enable"

done

Seria +- isso, preciso passar em cada uma das portas, e pegar as linhas referentes as configurações dela.

Desta forma, a quebra de linha que você falou não seria útil, pois não sei quantas linhas posso pegar depois de cada "GigabitEthernet1/0/*", entendeu?

Algumas portas mostram apenas o tipo, outras tem vlans, tagged e untagged...


Vamos com calma, eu sugeri apenas um meio para separar. Vou explicar por algoritmo:

1) substitua as quebras de linha por uma string não usada no arquivo
2) separe o arquivo usando os "#" como delimitadores de coluna
3) substitua a string não usada por quebras de linha

Assim você vai ter vários arquivinhos, cada um correspondendo a um bloquinho de texto iniciado e terminado por um #. Daí você aplica esse outro script, pra coletar as informações, em cada arquivo individual. Sacou agora?


5. Re: Manipulação de bloco de texto

Felipe Peres da Silva
flips

(usa Debian)

Enviado em 01/04/2014 - 10:59h

Entendi...

vou testar! Obrigado..


6. Re: Manipulação de bloco de texto

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 01/04/2014 - 11:06h

flips escreveu:

Entendi...

vou testar! Obrigado..


Ok, posta o retorno aqui depois






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts