特定の行が一致する部分にのみ特定のテキストを追加したいと思います。
この例では、次の行を追加したことがわかります。この行に沿って追加のスイッチをrpmos xi92
使用できますか?sed
運動
サンプルテキスト
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 \)\;}'
必須テキスト
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
ベストアンサー1
コマンドの後のすべての文字はa
追加される文字列として扱われるため、sed
苦情が発生します。unmatched `{'
1つの方法は使用することです-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
- コマンドが終了したら、Enter キーを押して
a
残りのコマンドを追加します。 - また、見ることができますGNU sed マニュアル - マルチコマンド構文