免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yy_galois
打印 上一主题 下一主题

【help】 sed 怎么实现对大量原文件插入一行 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-02-11 12:57 |只看该作者

回复 #8 ywlscpl 的帖子

请问,由于我希望写入原文件

我能否将 $i>$i.new
改为 $i>$i

论坛徽章:
0
12 [报告]
发表于 2009-02-11 13:11 |只看该作者

回复 #11 yy_galois 的帖子

应该不行,文件还未关闭
>$i.new
mv -f $i.new $i

论坛徽章:
0
13 [报告]
发表于 2009-02-11 14:18 |只看该作者
sed -i '/^class/,/^}/{s/class/#include "Sutb.h"\n&/;s/.*void setUp()/set_stubs();\n&/;}'

sed 有i参数可用的话,可直接改原文件,不过,最好是先备份,上面的可能在某些情况下出问题

论坛徽章:
0
14 [报告]
发表于 2009-02-11 14:31 |只看该作者

回复 #8 ywlscpl 的帖子

awk -v str1="#include \"Sutb.h\"" -v str2="set_stubs();" '{a[NR]=$0;if ($1=="class") print str1;print;if ($1=="{"&&a[NR-1]=="void setUp()") print str2}' $i>$i.new


刚才试了一下, 这个没有成功插入 str2..

论坛徽章:
0
15 [报告]
发表于 2009-02-11 14:32 |只看该作者

回复 #14 yy_galois 的帖子

a[NR-1]=="void setUp()"
你注意下这个判断,看你文件中是不是这样写的,我是根据你说的例子写的

论坛徽章:
0
16 [报告]
发表于 2009-02-11 14:35 |只看该作者
我这里没问题
  1. [root@Mylinux ~]# cat o.h

  2. class

  3. void setUp()
  4. {
  5. }

  6. void setUp()
  7. {
  8. }
  9. class
  10. [root@Mylinux ~]# awk -v str1="#include \"Sutb.h\"" -v str2="set_stubs();" '{a[NR]=$0;if ($1=="class") print str1;print;if ($1=="{"&&a[NR-1]=="void setUp()") print str2}' o.h

  11. #include "Sutb.h"
  12. class

  13. void setUp()
  14. {
  15. set_stubs();
  16. }

  17. void setUp()
  18. {
  19. set_stubs();
  20. }
  21. #include "Sutb.h"
  22. class
  23. [root@Mylinux ~]#
复制代码

论坛徽章:
0
17 [报告]
发表于 2009-02-11 14:43 |只看该作者

回复 #13 haimming 的帖子

sed -i '/^class/,/^}/{s/class/#include "Sutb.h"\n&/;s/.*void setUp()/set_stubs();\n&/;}'


这个吧  set_stubs();插入到  void setup(){} 方法前面去了。。

论坛徽章:
0
18 [报告]
发表于 2009-02-11 14:50 |只看该作者

回复 #17 yy_galois 的帖子

不好意思,粗心了

  1. sed -e '/^class/,/^}/{s/class/#include "Sutb.h"\n&/;/[ ]*void setUp()/{N;s/.*\n.*/&\nset_stubs();/;}}'
复制代码

越来越恶心了,又要等大师给改作业了, tim呢?

论坛徽章:
0
19 [报告]
发表于 2009-02-11 14:53 |只看该作者

回复 #16 ywlscpl 的帖子

test.h文件
      1 #include "rdf.h"
      2 #include "rp.h"
      3 #include "tlv.h"
      4 #include "api.h"
      5 #include "cfg.h"
      6
      7
      8 class TestConvertCostType : public CxxTest::TestSuite
      9 {
     10 public:
     11
     12     ENUM_COSTTYPE_E   enInput;
     13     TYPE_E                enOutput;
     14
     15     void setUp()
     16     {
     17
     18     }
     19
     20     void tearDown()
     21     {
     22         GlobalMockObject::verify();
     23     }
     24
     25     void test_func_should_return_if_input_case_1()
     26     {
     27         ;
     28     }
     29 }
     30



或者
#include "rdf.h"
#include "rp.h"
#include "tlv.h"
#include "api.h"
#include "cfg.h"


class TestConvertCostType : public CxxTest::TestSuite
{
public:

    ENUM_COSTTYPE_E   enInput;
    TYPE_E                enOutput;

    void setUp()
    {

    }

    void tearDown()
    {
        GlobalMockObject::verify();
    }

    void test_func_should_return_if_input_case_1()
    {
        ;
    }
}


效果如下

cox@sky:~/tmp> awk -v str1="#include \"Sutb.h\"" -v str2="set_stubs();" '{a[NR]=$0;if ($1=="class") print str1;print;if ($1=="{"&&a[NR-1]=="void setUp()") print str2}' Test_xxx.h
#include "rdf.h"
#include "rp.h"
#include "tlv.h"
#include "api.h"
#include "cfg.h"


#include "Sutb.h"
class TestConvertCostType : public CxxTest::TestSuite
{
public:

    ENUM_COSTTYPE_E   enInput;
    TYPE_E                enOutput;

    void setUp()
    {

    }

    void tearDown()
    {
        GlobalMockObject::verify();
    }

    void test_func_should_return_if_input_case_1()
    {
        ;
    }
}

cox@sky:~/tmp>

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
20 [报告]
发表于 2009-02-11 14:59 |只看该作者
学习学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP