Excluir linhas entre 2 cadeias de caracteres

-1

Eu tenho que deletar todas as picadas do começo do arquivo para um certo ponto usando qualquer coisa, sed, grep, awk no shell

ENTRADA

sCSISmart20 TRAP-TYPE                                  
    ENTERPRISE  cyclone                                                  
    DESCRIPTION                                          
    "Aspi: unable to read the file server hard disk might have problems"                           
    --#TYPE "Aspi: unable to read the database file"                                 
    --#SUMMARY "ASPI: unable to read the file, server hard disk may have problems"                                     
    --#ARGUMENTS {}                                 
    --#SEVERITY WARNING                                         
    --#TIMEINDEX 100                                                    
    --#STATE OPERATIONAL                                          
    --#HELP "scsismrt.hlp"                                                      
    --#HELPTAG 124                         
::=  124                                                                                            

sCSISmart21 TRAP-TYPE                                     
    ENTERPRISE  cyclone                                                
    DESCRIPTION                                                      
    "Aspi: database is corrupted"                                                  
    --#TYPE "Aspi: database is corrupted"                                          
    --#SUMMARY "ASPI: database file is corrupted"                                              
    --#ARGUMENTS {}                                                             
    --#SEVERITY WARNING                   
    --#TIMEINDEX 100                           
    --#STATE OPERATIONAL                              
    --#HELP "scsismrt.hlp"                        
    --#HELPTAG 125
::=  125                

sCSISmart12 TRAP-TYPE                                                
    ENTERPRISE  cyclone                                                        
    VARIABLES {cycHostAdapterNumber, cycScsiTargetID, cycLun, cycVendor, cycProduct, cycSenseInfo}                                                       
    DESCRIPTION                           
    "The HostAdapter# %d, TargetID %d, Lun# %d has Predictive Failure Condition on vendor %s product %s with sense info MSB(sense code), next  8 bits (sense code Qual) next 8 bits (Add sense code Qual) LSB (0000) %d"            
    --#TYPE "Device has SMART/Predicictive failure event"                   
    --#SUMMARY "The HostAdapter# %d , TargetID %d, Lun# %d has Predictive Failure Condition on vendor %s product %s with senseinfo %d"                  
    --#ARGUMENTS {0,1,2,3,4,5}                      
    --#SEVERITY INFORMATIONAL                
    --#TIMEINDEX 100                        
    --#STATE OPERATIONAL                       
    --#HELP "scsismrt.hlp"                     
    --#HELPTAG 116                                 
::=  116                       

CÓDIGO

sed/grep/awk (something that deletes from first line to ::= xxx(a random number))

OUTPUT

                                                  
sCSISmart21 TRAP-TYPE                                     
    ENTERPRISE  cyclone                                                
    DESCRIPTION                                                      
    "Aspi: database is corrupted"                                                  
    --#TYPE "Aspi: database is corrupted"                                          
    --#SUMMARY "ASPI: database file is corrupted"                                              
    --#ARGUMENTS {}                                                             
    --#SEVERITY WARNING                   
    --#TIMEINDEX 100                           
    --#STATE OPERATIONAL                              
    --#HELP "scsismrt.hlp"                        
    --#HELPTAG 125
::=  125                

sCSISmart12 TRAP-TYPE                                                
    ENTERPRISE  cyclone                                                        
    VARIABLES {cycHostAdapterNumber, cycScsiTargetID, cycLun, cycVendor, cycProduct, cycSenseInfo}                                                       
    DESCRIPTION                           
    "The HostAdapter# %d, TargetID %d, Lun# %d has Predictive Failure Condition on vendor %s product %s with sense info MSB(sense code), next  8 bits (sense code Qual) next 8 bits (Add sense code Qual) LSB (0000) %d"            
    --#TYPE "Device has SMART/Predicictive failure event"                   
    --#SUMMARY "The HostAdapter# %d , TargetID %d, Lun# %d has Predictive Failure Condition on vendor %s product %s with senseinfo %d"                  
    --#ARGUMENTS {0,1,2,3,4,5}                      
    --#SEVERITY INFORMATIONAL                
    --#TIMEINDEX 100                        
    --#STATE OPERATIONAL                       
    --#HELP "scsismrt.hlp"                     
    --#HELPTAG 116                                 
::=  116   

Então você vê apenas a primeira parte do arquivo que foi deletada. Depois eu posso colocar isso em um LOOP para que eu apague um parágrafo de cada vez.
TAMBÉM cada arquivo é separado por um link em branco, Então você também pode me dizer algo que exclua da primeira linha até a primeira linha em branco que encontrar.

    
por SamFlynn 16.06.2015 / 08:43

3 respostas

1

Usando sed :

< inputfile sed '1,/::=/d' > outputfile
  • < inputfile : redireciona o conteúdo de inputfile para sed ' stdin
  • > outputfile : redireciona o conteúdo de sed stdout para outputfile

% de colapso do comandosed:

  • 1,/::=/d : exclui todas as linhas entre a primeira e a primeira que corresponde à ::= regex, inclusive

Usando awk :

< inputfile awk 'NR==1,/::=/ {next}; {print}' > outputfile
  • < inputfile : redireciona o conteúdo de inputfile para sed ' stdin
  • > outputfile : redireciona o conteúdo de sed stdout para outputfile

% de colapso do comandoawk:

  • NR==1,/::=/ {next} : ignora o registro se entre o primeiro e o primeiro correspondente ao ::= regex inclusive
  • {print} : imprime o registro

Usando o Perl:

 < inputfile perl -0777 -pe 's/^(.*\n)*?::=.*\n//' > outputfile
  • -0777 : faz o slurps do arquivo inteiro de uma só vez, em vez de uma linha no momento
  • -p : coloca um loop while (<>) {[...]} ao redor do script e imprime o arquivo processado
  • -e : lê o script dos argumentos

Divisão do comando Perl:

  • s : afirma para executar uma substituição
  • / : inicia o padrão
  • ^(.*\n)*?::=.*\n : corresponde a qualquer caractere zero ou mais vezes no início do arquivo avidamente na linha atual (ou seja, o padrão ( . ) será correspondido o maior número de vezes possível dentro da linha atual) e uma nova linha, zero ou mais vezes preguiçosamente dentro do arquivo atual (ou seja, o padrão (.*\n) será correspondido o mínimo possível dentro do arquivo atual) antes de uma string ::= , correspondendo a qualquer caractere zero ou mais vezes avidamente dentro da linha atual e uma nova linha
  • / : interrompe o padrão / inicia a sequência de substituição
  • / : interrompe a string de substituição / inicia os modificadores
por kos 16.06.2015 / 09:04
1

Outra versão awk :

awk '/sCSISmart(12|20)\s+TRAP-TYPE/,/::=/ {print}' foo
  • /sCSISmart(12|20)\s+TRAP-TYPE/

    corresponde a sCSISmart12 TRAP-TYPE e sCSISmart20 TRAP-TYPE

    especifique o que você precisa

Saída

sCSISmart20 TRAP-TYPE                                  
    ENTERPRISE  cyclone                                                  
    DESCRIPTION                                          
    "Aspi: unable to read the file server hard disk might have problems"                           
    --#TYPE "Aspi: unable to read the database file"                                 
    --#SUMMARY "ASPI: unable to read the file, server hard disk may have problems"                                     
    --#ARGUMENTS {}                                 
    --#SEVERITY WARNING                                         
    --#TIMEINDEX 100                                                    
    --#STATE OPERATIONAL                                          
    --#HELP "scsismrt.hlp"                                                      
    --#HELPTAG 124                         
::=  124                                                                                            
sCSISmart12 TRAP-TYPE                                                
    ENTERPRISE  cyclone                                                        
    VARIABLES {cycHostAdapterNumber, cycScsiTargetID, cycLun, cycVendor, cycProduct, cycSenseInfo}                                                       
    DESCRIPTION                           
    "The HostAdapter# %d, TargetID %d, Lun# %d has Predictive Failure Condition on vendor %s product %s with sense info MSB(sense code), next  8 bits (sense code Qual) next 8 bits (Add sense code Qual) LSB (0000) %d"            
    --#TYPE "Device has SMART/Predicictive failure event"                   
    --#SUMMARY "The HostAdapter# %d , TargetID %d, Lun# %d has Predictive Failure Condition on vendor %s product %s with senseinfo %d"                  
    --#ARGUMENTS {0,1,2,3,4,5}                      
    --#SEVERITY INFORMATIONAL                
    --#TIMEINDEX 100                        
    --#STATE OPERATIONAL                       
    --#HELP "scsismrt.hlp"                     
    --#HELPTAG 116                                 
::=  116 
    
por A.B. 16.06.2015 / 12:01
1

Abordagem pura BASH

O script abaixo pega um arquivo como argumento de linha de comando e imprime todas as linhas somente depois que a primeira ::= string é encontrada.

#!/bin/bash
main(){
    local flag=false
    while IFS= read -r line;
    do 
        case "$line" in
            *"::="*) flag=true && continue ;;
        esac
        $flag && echo "$line"
    done  < "$1"
}
main "$@"

Execução de teste (concorda com a saída desejada do OP):

$ ./remove_paragraph.sh  input.txt                                                                    

sCSISmart21 TRAP-TYPE                                     
    ENTERPRISE  cyclone                                                
    DESCRIPTION                                                      
    "Aspi: database is corrupted"                                                  
    --#TYPE "Aspi: database is corrupted"                                          
    --#SUMMARY "ASPI: database file is corrupted"                                              
    --#ARGUMENTS {}                                                             
    --#SEVERITY WARNING                   
    --#TIMEINDEX 100                           
    --#STATE OPERATIONAL                              
    --#HELP "scsismrt.hlp"                        
    --#HELPTAG 125

sCSISmart12 TRAP-TYPE                                                
    ENTERPRISE  cyclone                                                        
    VARIABLES {cycHostAdapterNumber, cycScsiTargetID, cycLun, cycVendor, cycProduct, cycSenseInfo}                                                       
    DESCRIPTION                           
    "The HostAdapter# %d, TargetID %d, Lun# %d has Predictive Failure Condition on vendor %s product %s with sense info MSB(sense code), next  8 bits (sense code Qual) next 8 bits (Add sense code Qual) LSB (0000) %d"            
    --#TYPE "Device has SMART/Predicictive failure event"                   
    --#SUMMARY "The HostAdapter# %d , TargetID %d, Lun# %d has Predictive Failure Condition on vendor %s product %s with senseinfo %d"                  
    --#ARGUMENTS {0,1,2,3,4,5}                      
    --#SEVERITY INFORMATIONAL                
    --#TIMEINDEX 100                        
    --#STATE OPERATIONAL                       
    --#HELP "scsismrt.hlp"                     
    --#HELPTAG 116
    
por Sergiy Kolodyazhnyy 02.02.2017 / 02:24