SED - Substituição de caracteres com backup do arquivo original
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 21 de setembro de 2012
Suponhamos que você tenha centenas de programas, por exemplo, na linguagem C, e queira inserir após um determinado local nestes programas, uma linha adicional.
Tomando como exemplo um arquivo chamado programa.c, com o seguinte conteúdo:
#include "quad.h" #define B ((int)1 << HALF_BITS) /* digit base */ ... (linhas omitidas)
Para incluir uma linha contendo o texto #include "header.h"
após a linha
#include "header.h"
use o seguinte comando:
sed -i 's/#include "quad.h/#include "quad.h\n#include "header.h"/' programa.c
Após a execução, temos:
#include "quad.h" #include "header.h" #define B ((int)1 << HALF_BITS) /* digit base */
A quebra de linha é indicada por \n
.
É recomendável fazer um backup antes de fazer mudanças radicais em muitos arquivos. O próprio comando sed oferece esta opção. Por exemplo, para criar um backup dos arquivos modificados usando como sufixo a data em que foi feita a modificação, podemos usar:
sed -i_`date +%Y%m%d` 's/#include "quad.h/#include "quad.h\n#include "header.h"/' programa.c
Será criado um arquivo de backup, para o exemplo acima, chamado
programa.c_20120921
.
O valor do sufixo é determinado pelo resultado do comando date +%Y%m%d
.