sed для добавления в определенную строку только в определенных пределах

Я хочу добавить определенный текст только после совпадения с определенной строкой.

В настоящее время в примере видно, что я добавил строку rpmos xi92 ; могу ли я использовать переключатель добавления в sed в соответствии с этой тренировкой

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

Команда

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

0
14.06.2017, 08:22
1 ответ

все символы после команды aрассматриваются как добавляемая строка, поэтому sedбудет жаловаться наunmatched `{'

Один из способов — использовать-e(протестировано с GNU sed, не уверен в переносимости)

$ 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
  • Обратите внимание, что \не требуется для экранирования символов, таких как (, в разделе замены

Или вы также можете использовать

$ sed '/module sac1/, /endmodule/ {/pmos_bulk_vt3  xi92/a\    rpmos   xi92 (net307, rblt, rdb );
}' ip.txt
2
28.01.2020, 02:33

Теги

Похожие вопросы