br comando para substituir texto de várias linhas por vazio

0

Eu tenho um arquivo XML que contém a parte indicada abaixo.

<Target name=something>
     < other content here>
</Target>

Agora, como posso remover este conteúdo do meu arquivo usando o comando sed? Eu tentei o abaixo, mas não funcionou.

sed -ir  's/\<Target Name\=.*.\<\/Target\>//g' filename

Por favor, conselhos.

    
por Uvais Ibrahim 27.05.2016 / 16:53

2 respostas

4

  1. você deve usar ferramentas XML para manipular estruturas XML

  2. sed é destinado a processar as coisas linha a linha, você provavelmente desejará que o awk resolva esse tipo de substituição.

Para resolver seu problema com o awk:

awk '/<Target /,/<\/Target>/ { next } 1' your_file

edit:

acabou de encontrar: sed pode fazer a mesma coisa

sed '/<Target /,/<\/Target>/d' your_file
    
por 27.05.2016 / 17:07
2

John tem, na verdade, respondeu a maior parte da sua pergunta. No entanto, notei que você pretende fazer uma edição no local fornecendo a opção -i para sed . Note que esta opção leva um argumento opcional SUFFIX. Se SUFFIX for fornecido, um backup do arquivo de entrada será feito adicionando SUFFIX ao seu nome. O problema mais provável na sua linha de comando é que a letra 'r' em -ir é interpretada como o sufixo de backup, em vez de uma opção separada -r . Para obter o efeito desejado (quando você não pretende fazer backup de arquivos durante a edição no local), não combine outras opções com -i (ou certifique-se de que i sempre seja o último):

# All these do the same thing (in-place editing using extended regular expressions)
sed -r -i ...
sed -i -r ...
sed -ri ...

# This one backs up input files by appending the letter 'r' to their names
# (and DOES NOT use extended regular expressions)
sed -ir ...
    
por 28.05.2016 / 12:56