br comando para comentar bloco de código específico contendo cadeia de pesquisa [fechado]

0

Eu tenho um arquivo listener.ora para Oracle, no qual preciso comentar um bloco de linhas especificado por uma string de pesquisa, por exemplo,

>(DESCRIPTION=
>>(ADDRESS_LIST=
>>>(ADDRESS=(PROTOCOL=tcp)(HOST=sale-server)(PORT=1521))
>>>(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
>SID_LIST_LISTENER=
>>(SID_LIST=
>>>(SID_DESC=
>>>>(GLOBAL_DBNAME=sales)
>>>>(ORACLE_HOME=/oracle9i)
>>>>(SID_NAME=ales)
>>>>(PROGRAM=extproc))
>>>(SID_DESC=
>>>>(SID_NAME=plsextproc)
>>>>(ORACLE_HOME=/oracle9i)
>>>>(PROGRAM=extproc)))

No arquivo acima eu tenho que procurar por sales (que é o nome do banco de dados) e comentar o bloco inteiro que contém essa string até o próximo bloco SID_DESC . por exemplo, saída desejada:

>(DESCRIPTION=  
>>(ADDRESS_LIST=  
>>>(ADDRESS=(PROTOCOL=tcp)(HOST=sale-server)(PORT=1521))  
>>>(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))  
>SID_LIST_LISTENER=  
>>(SID_LIST=  
>>>#(SID_DESC=  
>>>>#(GLOBAL_DBNAME=sales)  
>>>>#(ORACLE_HOME=/oracle9i)  
>>>>#(SID_NAME=ales)  
>>>>#(PROGRAM=extproc))  
>>>(SID_DESC=  
>>>>(SID_NAME=plsextproc)  
>>>>(ORACLE_HOME=/oracle9i)  
>>>>(PROGRAM=extproc)))
    
por user138725 15.10.2015 / 19:43

2 respostas

1

Parece-me que este não é um trabalho para um único comando sed, mas para um script de shell completo.

  1. Definir um contador de linha
  2. Definir marcadores SID
  3. Ler linha por linha
  4. Marque cada local do SID (coloque-os em uma matriz)
  5. Marque cada local de correspondência de padrões (coloque-os em outra matriz)
  6. Verifique as matrizes. Se a correspondência estiver entre os SIDs, comente todas as linhas do primeiro SID até o segundo SID - 1 linha

Espero que isso ajude.

Deixe-me saber se você precisa de um guia mais detalhado.

    
por 15.10.2015 / 20:13
0

É uma tarefa bastante simples para sed

sed '
    /SID_DESC/{
        /\n/{
            P
            D
            }
        :1
        N
        /PROGRAM/!b1
        /sales/s/[^\n]*\n/#&/g
        }
    ' listener.ora
    
por 15.10.2015 / 20:26