Usando sed Eu quero substituir o primeiro bloco de texto que corresponde

1

Eu tenho um script com centenas de linhas e enquanto meu comando de pesquisa e substituição funciona e o remove em vários locais.

O texto a ser substituído está localizado em outro arquivo e minha pesquisa e substituição funcionam perfeitamente, mas infelizmente eu quero que apenas a primeira instância do texto do bloco seja substituída.

ORIGINAL_FILE ARQUIVO DE TEXTO NEW_FILE

Substitua todo o texto entre RECOMMENDED e STATIC pelo conteúdo de TEXT_FILE

sed -n -e "1,/RECOMMENDED/ p" -e "/STATIC/,$ p" -e "/RECOMMENDED/ r $TEXT_FILE" $ORIGINAL_FILE >$NEW_FILE

Como eu digo, isso funciona, mas há vários locais onde RECOMMENDED e STATIC estão disponíveis e quero alterar apenas a primeira instância.

Qualquer ajuda é muito apreciada

    
por gcclinux 17.08.2017 / 18:09

1 resposta

1

Se você fizer isso:

sed -n -e '1,/RECOMMENDED/ p' \
       -e '/STATIC/,$ {p;d;}' \
       -e "/RECOMMENDED/ r $TEXT_FILE" < "$ORIGINAL_FILE" > "$NEW_FILE"

Em seguida, o /RECOMMENDED/ não corresponderá após as linhas que correspondem a /STATIC/ , pois nós d as eliminamos após a impressão.

    
por 17.08.2017 / 18:33