pt para anexar em linha específica dentro de certo limite

0

Eu quero acrescentar um texto específico após a correspondência da linha em particular.

Atualmente, no exemplo, podemos ver que adicionei a linha rpmos xi92 ; posso usar o interruptor de acréscimo em sed de acordo com as treino

Sample_text

module sac1 ( out_ports , in_ports );
    output out_ports;
    input in_ports;
    pmos_bulk_vt3  xi92 ( net307, rdb, rblt, vnwa );
    pmos_bulk_vt3  xi82 ( vddai, sel_b, net287, vnwa );
endmodule

module sac2 ( out_ports , in_ports );
    output out_ports;
    input in_ports;
    pmos_bulk_vt3  xi92 ( net307, rdb, rblt, vnwa );
    pmos_bulk_vt3  xi82 ( vddai, sel_b, net287, vnwa );
endmodule

Comando

sed -i '/module sac1/ , /endmodule/ {/pmos_bulk_vt3  xi92/a rpmos   xi92 \( net307\, rblt\, rdb \)\;}'

Desired_text

module sac1 ( out_ports , in_ports );
    output out_ports;
    input in_ports;
    pmos_bulk_vt3  xi92 ( net307, rdb, rblt, vnwa );
    rpmos  xi92 (net307, rblt, rdb );
    pmos_bulk_vt3  xi82 ( vddai, sel_b, net287, vnwa );
endmodule

module sac2 ( out_ports , in_ports );
    output out_ports;
    input in_ports;
    pmos_bulk_vt3  xi92 ( net307, rdb, rblt, vnwa );
    pmos_bulk_vt3  xi82 ( vddai, sel_b, net287, vnwa );
endmodule
    
por JigarGandhi 14.06.2017 / 07:22

1 resposta

2

todos os caracteres após o comando a são tratados como uma string a ser anexada, portanto, sed irá reclamar sobre unmatched '{'

Uma maneira é usar -e (testado com GNU sed , não tenho certeza sobre portabilidade)

$ sed -e '/module sac1/ , /endmodule/ {/pmos_bulk_vt3  xi92/a\    rpmos   xi92 (net307, rblt, rdb );' -e '}' ip.txt    
module sac1 ( out_ports , in_ports );
    output out_ports;
    input in_ports;
    pmos_bulk_vt3  xi92 ( net307, rdb, rblt, vnwa );
    rpmos   xi92 (net307, rblt, rdb );
    pmos_bulk_vt3  xi82 ( vddai, sel_b, net287, vnwa );
endmodule

module sac2 ( out_ports , in_ports );
    output out_ports;
    input in_ports;
    pmos_bulk_vt3  xi92 ( net307, rdb, rblt, vnwa );
    pmos_bulk_vt3  xi82 ( vddai, sel_b, net287, vnwa );
endmodule
  • Observe que \ não é necessário para escapar de caracteres como ( na seção de substituição

Ou você também pode usar

$ sed '/module sac1/ , /endmodule/ {/pmos_bulk_vt3  xi92/a\    rpmos   xi92 (net307, rblt, rdb );
}' ip.txt
por 14.06.2017 / 07:44