все символы после команды 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
a
, а затем добавьте оставшуюся часть команды Проблема заключалась в том, что новый xinit несовместим с моим старым файлом.xinitrc. Я добавил содержимое.xinitrc в.profile, и все снова заработало.