sed는 특정 제한 내에서만 특정 줄에 추가합니다.

sed는 특정 제한 내에서만 특정 줄에 추가합니다.

특정 줄이 일치하는 부분에만 특정 텍스트를 추가하고 싶습니다.

현재 이 예에서는 다음 줄을 추가한 것을 볼 수 있습니다 . 이 줄을 따라 추가 스위치를 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 `{'

한 가지 방법은 사용하는 것입니다 -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

관련 정보