Problema ao manipular texto usando grep

4

Eu quero procurar uma linha que contenha log4j e leve 7 linhas antes e 3 linhas após a partida.

grep -B7 -A3 "log4j" web.xml

Depois disso, quero adicionar tags de comentários antes deste parágrafo e depois dele.

<!--
paragraph that i found by grep
-->

Eu escrevi este script abaixo:

search='find . -name 'web.xml''
text='grep -B7 -A3 "log4j" $search'
sed -i "/$text/c $newparagraph" $search

Não está funcionando. Existe alguma maneira de adicionar apenas símbolo de comentário e não substituir o parágrafo?

O que eu quero que o script faça:

  1. pesquise pelo parágrafo
  2. acrescentar
  3. acrescentar - > no final

Editar : este é o parágrafo que estou tentando manipular:

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>

<listener>
    <listenerclass>
        org.springframework.web.util.Log4jConfigListener
    </listener-class>
</listener>

Este parágrafo faz parte de muitos parágrafos! Eu quero fazer assim:

<!--
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>

<listener>
    <listenerclass>
        org.springframework.web.util.Log4jConfigListener
    </listener-class>
</listener>
-->
    
por moata_u 06.03.2011 / 13:19

1 resposta

0

Isso seria melhor feito com uma biblioteca XML, mas aqui está em sed ...

Sed tem os comandos i e a para inserir e anexar linhas. Eu acho que o script a seguir ajudará.

sed -n '/log4jConfigLocation/=' < test.test |\
while read index; do
    sed -i $search -e "$((index-1)) i\ <\!--" -e "$((index+8)) a\ -->" < $search
done

A primeira parte, 'sed -n' / log4jConfigLocation / = 'irá obter os números de linha que possuem' log4jConfigLocation '. A próxima parte usa esses números de linha em dois comandos: insira uma linha 1 acima e anexe linhas de 8 linhas abaixo.

Existe uma maneira melhor de usar o buffer de espera do sed, mas eu não estou familiarizado o suficiente com isso; Se estiver interessado, pode ver o este guia . Por fim, se você for trabalhar com esse tipo de coisa regularmente, verifique o XMLStarlet .

    
por Shawn J. Goff 06.03.2011 / 14:21