Em vez de padrões de regex do feio, se todas as linhas tiverem o mesmo formato fixo como suas duas linhas (6 * x; cmd="..."; 4 * x), abaixo os comandos alternativos farão o trabalho no arquivo , sem exigir um loop de leitura de arquivo.
O ponto-chave (se o formato for constante em todas as linhas) é o uso do "
como delimitador, cortando as linhas em 3 campos separados.
$ sed 's/lbk_addcolumn/ColumnAdd/;s/lbk_dropcolumn/ColumnDrop/' <(awk -F'"' '{if (($0=="")) print $0;else print $1"\""$2" || "$2"\""$3}' file.txt)
Ou:
$ a=$(awk -F'"' '{if (($0=="")) print $0;else print $1"\""$2" || "$2"\""$3}' file.txt)
$ sed 's/lbk_addcolumn/ColumnAdd/;s/lbk_dropcolumn/ColumnDrop/' <<<"$a"
o awk divide cada linha do arquivo com "
como delimitador.
se $0=""
for uma linha em branco, imprima a linha em branco e continue
mais imprima todos os campos de linha na ordem necessária.
Finalmente, o sed substitui o primeiro texto encontrado lbk_addcolumn
por ColumnAdd
.
Teste:
$ cat e.txt
x;x;x;x;x;x;cmd="lbk_addcolumn TABLE_NAME_1 COLUMN_X";x;x;x;x
x;x;x;x;x;x;cmd="lbk_dropcolumn TABLE_NAME_2 COLUMN_Y";x;x;x;x
# sed 's/lbk_addcolumn/ColumnAdd/;s/lbk_dropcolumn/ColumnDrop/' <(awk -F'"' '{if (($0=="")) print $0;else print $1"\""$2" || "$2"\""$3}' e.txt)
x;x;x;x;x;x;cmd="ColumnAdd TABLE_NAME_1 COLUMN_X || lbk_addcolumn TABLE_NAME_1 COLUMN_X";x;x;x;x
x;x;x;x;x;x;cmd="ColumnDrop TABLE_NAME_2 COLUMN_Y || lbk_dropcolumn TABLE_NAME_2 COLUMN_Y";x;x;x;x
O mesmo resultado pode ser alcançado mesmo com o awk e o uso da função gsub awk:
$ awk -F'"' '{if ($0=="") print $0;else {a=$2;gsub("lbk_addcolumn","ColumnAdd",$2);gsub("lbk_dropcolumn","ColumnDrop",$2);print $1"\""$2" || "a"\""$3;}}' e.txt
x;x;x;x;x;x;cmd="ColumnAdd TABLE_NAME_1 COLUMN_X || lbk_addcolumn TABLE_NAME_1 COLUMN_X";x;x;x;x
x;x;x;x;x;x;cmd="ColumnDrop TABLE_NAME_2 COLUMN_Y || lbk_dropcolumn TABLE_NAME_2 COLUMN_Y";x;x;x;x
awk better presentation:
$ awk -F'"' '{
if ($0=="") print $0;
else {
a=$2;
gsub("lbk_addcolumn","ColumnAdd",$2);
gsub("lbk_dropcolumn","ColumnDrop",$2);
print $1"\""$2" || "a"\""$3;
}
}' e.txt