关于sed多行替换的命令!

关于sed多行替换的命令!

列如我有一个文件 test:
该文件的内容为:
a
b
c
d
e
f
g
#########
我如何用sed命令将从c开始的这行到f这行都加上#.
只能用一次sed。
sed '3,6s/.*/#&/' test
如果我行号变了怎么办,我的想法是先找到c,然后在替换,这样替换的话如果c这行前面多了一行就不对了,有没有灵活点的方法啊,谢谢指点!
sed '/^c$/,/^f$/s/^/#/' test

万一文件中有以下情况呢?

[code:1]a
b
c
c
d
f
g[/code:1]

[code:1]c
d
f
g[/code:1]
[code:1]sed '/c/,/f/s/.*/#&/g' file
[/code:1]
有问题,不行的。
刚才多打了一个|,你看看现在可以不?我刚在我这里试了,可以的
我知道,但关键是如果文件中还有以下这种情况呢?

[code:1]a
b
c
c
d
ze
f
g
#########[/code:1]

或者我前面说的那几种情况。
其实我要做的东西是这么一个功能:
我这个是一个配置文件,如果要用到这个功能(列如录音程序),那么我就将文件中录音这段程序注释去掉,如果想关闭这个功能的话,那么我就将文件中录音的程序注释加上去,下面是我这个文件中的一段代码:
        if (!t_newtran()) {
                        log("could not create new transaction\n");
                        sl_send_reply("500","could not create new transaction");
                        break;
                };


if(method=="INVITE"){
                        log("**************** vm start - begin ******************\n");
                        if(!vm("/tmp/am_fifo","voicemail")){
                                log("could not contact the answer machine\n");
                                t_reply("500","could not contact the answer machine");
                        };
                        log("**************** vm start - end ******************\n");
                        break;
                } else if(method=="BYE"){
                        log("**************** vm end - begin ******************\n");
                        if(!vm("/tmp/am_fifo","bye")){
                                log("could not contact the answer machine\n");
                                t_reply("500","could not contact the answer machine");
                        };
                        log("**************** vm end - end ******************\n");
                break;
};

按照前面斑竹的做发sed '/^c$/,/^f$/s/^/#/' test,用三次就可以把这段通通注释掉,但如果我要打开这个功能,把这段的注释通通去掉的话,那我有应该怎么做啊?
其实我要做的东西是这么一个功能:
我这个是一个配置文件,如果要用到这个功能(列如录音程序),那么我就将文件中录音这段程序注释去掉,如果想关闭这个功能的话,那么我就将文件中录音的程序注释加上去,下面是我这个文件中的一段代码:
        if (!t_newtran()) {
                        log("could not create new transaction\n");
                        sl_send_reply("500","could not create new transaction");
                        break;
                };


if(method=="INVITE"){
                        log("**************** vm start - begin ******************\n");
                        if(!vm("/tmp/am_fifo","voicemail")){
                                log("could not contact the answer machine\n");
                                t_reply("500","could not contact the answer machine");
                        };
                        log("**************** vm start - end ******************\n");
                        break;
                } else if(method=="BYE"){
                        log("**************** vm end - begin ******************\n");
                        if(!vm("/tmp/am_fifo","bye")){
                                log("could not contact the answer machine\n");
                                t_reply("500","could not contact the answer machine");
                        };
                        log("**************** vm end - end ******************\n");
                break;
};

按照前面斑竹的做发sed '/^c$/,/^f$/s/^/#/' test,用三次就可以把这段通通注释掉,但如果我要打开这个功能,把这段的注释通通去掉的话,那我有应该怎么做啊?