0

I want to append a particular text after match of the particular line only.

Currently, in example one can see I added the line rpmos xi92; can I use append switch in sed as per this workout

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

Command

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
JigarGandhi
  • 4,960

1 Answers1

2

all characters after a command is treated as string to be appended, hence sed will complain about unmatched `{'

One way is to use -e (tested with GNU sed, not sure about portability)

$ 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
  • Note that \ is not needed to escape characters like ( in replacement section

Or you can also use

$ sed '/module sac1/ , /endmodule/ {/pmos_bulk_vt3  xi92/a\    rpmos   xi92 (net307, rblt, rdb );
}' ip.txt
Sundeep
  • 12,008