免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2670 | 回复: 10

[文本处理] 取代并且打印所有的内容 [复制链接]

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
发表于 2017-09-15 16:23 |显示全部楼层
本帖最后由 南武水寿 于 2017-09-15 16:29 编辑

请教文本处理(能用shell更棒):
1. 在module 和 endmodule之间能匹配module FSN_DLLDELAY 和 input IN 以及 output Z的段落里,含有 input | output | wire | module 等关键字的行 不动,其他不含有这些关键字的行则把它们删除并且只用一行 “DLL U3 (IN,OUT,S);” 取代;然后所有文本打印出来
2. module 和 endmodule之间不匹配module FSN_DLLDELAY 和 input IN 以及 output Z的段落则不动,按原来的文本打印。
3. 以第一段为例,希望打印的结果如下:
module FSN_DLLDELAY_2_1472 ( Z0, Z1, IN0, IN1, S0, S1 );
  input IN0, IN1, S0, S1;
  output Z0, Z1;
  wire n1;

  DLL U3 (IN,OUT,S);
endmodule

4.注意:有的匹配段落不含有 wire 关键字
5. 原文本如下(也可以参照附件):

module FSN_DLLDELAY_2_1472 ( Z0, Z1, IN0, IN1, S0, S1 );
  input IN0, IN1, S0, S1;
  output Z0, Z1;
  wire n1;

  OAI2XB1_X1N_A9PP84TR_C14 U3 ( .A1N(IN0), .A0(S0), .B0(S1), .Y(Z1) );
endmodule


module usdhc_parts_dll_dly_cell_529 ( loop_out, out, sel_out,
        sel_in, in, loop_in );
  input sel_out, sel_in, in, loop_in;
  output loop_out, out;


  FSN_DLLDELAY_2_1473 u1_sgtl_dtg ( .Z0(out), .Z1(loop_out),
        .IN0(in), .IN1(loop_in), .S0(sel_in), .S1(sel_out) );
endmodule


module FSN_DLLDELAY_2_1473 ( Z0, Z1, IN0, IN1, S0, S1 );
  input IN0, IN1, S0, S1;
  output Z0, Z1;


  NAND2B_X1N_A9PP84TR_C14 U3 ( .AN(S0), .B(IN0), .Y(Z0) );
  MXIT2_X1N_A9PP84TR_C14 U4 ( .A(IN1), .B(Z0), .S0(S1), .Y(Z1) );
endmodule


module usdhc_parts_dll_dly_cell_530 ( loop_out, out, sel_out,
        sel_in, in, loop_in );
  input sel_out, sel_in, in, loop_in;
  output loop_out, out;


  FSN_DLLDELAY_2_1474 u1_sgtl_dtg ( .Z0(out), .Z1(loop_out),
        .IN0(in), .IN1(loop_in), .S0(sel_in), .S1(sel_out) );
endmodule


module FSN_DLLDELAY_2_1474 ( Z0, Z1, IN0, IN1, S0, S1 );
  input IN0, IN1, S0, S1;
  output Z0, Z1;


  NAND2B_X1N_A9PP84TR_C14 U3 ( .AN(S0), .B(IN0), .Y(Z0) );
  MXIT2_X1N_A9PP84TR_C14 U4 ( .A(IN1), .B(Z0), .S0(S1), .Y(Z1) );
endmodule


module usdhc_parts_dll_dly_cell_531 ( loop_out, out, sel_out,
        sel_in, in, loop_in );
  input sel_out, sel_in, in, loop_in;
  output loop_out, out;


  FSN_DLLDELAY_2_1475 u1_sgtl_dtg ( .Z0(out), .Z1(loop_out),
        .IN0(in), .IN1(loop_in), .S0(1'b0), .S1(sel_out) );
endmodule


module FSN_DLLDELAY_2_1475 ( Z0, Z1, IN0, IN1, S0, S1 );
  input IN0, IN1, S0, S1;
  output Z0, Z1;


  INVP_X1R_A9PP84TR_C14 U3 ( .A(IN0), .Y(Z0) );
  MXIT2_X1N_A9PP84TR_C14 U4 ( .A(IN1), .B(Z0), .S0(S1), .Y(Z1) );
endmodule


module usdhc_parts_dll_dly_cell_532 ( loop_out, out, sel_out,
        sel_in, in, loop_in );
  input sel_out, sel_in, in, loop_in;
  output loop_out, out;


  FSN_DLLDELAY_2_1476 u1_sgtl_dtg ( .Z0(out), .Z1(loop_out),
        .IN0(in), .IN1(loop_in), .S0(1'b0), .S1(1'b0) );
endmodule


module FSN_DLLDELAY_2_1476 ( Z0, Z1, IN0, IN1, S0, S1 );
  input IN0, IN1, S0, S1;
  output Z0, Z1;
  wire n2;

  INVP_X1R_A9PP84TR_C14 U4 ( .A(IN0), .Y(Z0) );
  INVP_X1R_A9PP84TR_C14 U3 ( .A(IN1), .Y(Z1) );
endmodule







论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
发表于 2017-09-15 16:27 |显示全部楼层
我目前只会匹配到相关段落
awk -vRS="endmodule" -vFS=';' '{if($1~/FSN_DLLDELAY/ && $2~/input IN/ && $3~/output Z/)

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2017-09-15 16:44 |显示全部楼层
本帖最后由 moperyblue 于 2017-09-15 17:01 编辑
  1. sed '/module FSN_DLLDELAY/{:a;N;/endmodule/!ba;s/\n\s*\n\s*.*\n/\n\n  DLL U3 (IN,OUT,S);\n/}'
复制代码

?

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
发表于 2017-09-15 17:09 |显示全部楼层
回复 3# moperyblue

ba: Event not found.
感觉就是这个思路

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2017-09-15 17:13 |显示全部楼层
回复 4# 南武水寿


是bash吗?

bash.    sed (GNU sed) 4.2.2  没问题

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
发表于 2017-09-15 17:24 |显示全部楼层
回复 5# moperyblue
灰常感谢!您写的木有问题~
google了一下,The error ba: Event not found is coming from csh, and is due to csh trying to match !ba in your history list. You can escape the ! and write the command:
[size=17.27272605895996px]

[size=17.27272605895996px]sed '/module FSN_DLLDELAY/{:a;N;/endmodule/\!ba;s/\n\s*\n\s*.*\n/\n\n  DLL U3 (IN,OUT,S);\n/}'
[size=17.27272605895996px]微调了一下我这边就好啦



论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2017-09-15 17:28 |显示全部楼层
本帖最后由 moperyblue 于 2017-09-15 21:57 编辑

回复 6# 南武水寿


ok.

  1. awk '/module FSN_DLLDELAY/{f=1}f{s=s?s RS $0:$0;if(/endmodule/){gsub(/\n\s*\n\s*.*\n/,"\n\n  DLL U3 (IN,OUT,S);\n",s);print s;f=0};next}1'
复制代码

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
发表于 2017-09-15 18:42 |显示全部楼层
回复 7# moperyblue

赞!

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2017-09-15 19:58 |显示全部楼层
回复 1# 南武水寿

  1. awk 'BEGIN{a["module"];a["input"];a["output"];a["wire"]}/module FSN_DLLDELAY/{f=1};/endmodule/{f=0};f{if($1 in a){print $0}else(b="DLL U3 (IN,OUT,S);")}!f{if($0~"endmodule"){print b};print}' file
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-09-16 21:54 |显示全部楼层
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my ($r, $v) = ('DLL U3 (IN,OUT,S);', 'FSN_DLLDELAY');
  5. my $keys = {'input' => 1, 'output' => 1, 'wire' => 1, 'module' => 1, 'endmodule' => 1};
  6. my $n = keys %$keys;
  7. my ($flag, @block);

  8. while(<DATA>){
  9.         if(/\bmodule/){
  10.                 $flag = /$v/;
  11.         }
  12.         if(!$flag){
  13.                 print;
  14.                 next;
  15.         }
  16.         my ($k) = (split)[0] // '';
  17.         if(!/endmodule/){
  18.                 push(@block, [$_, $k]);
  19.                 next;
  20.         }
  21.         push(@block, [$_, $k]);
  22.         my @idx = grep {!$keys->{$block[$_][-1]}} 0 .. $#block;
  23.         if($n == (@block - @idx)){
  24.                 $_->[0] = "$r\n" for grep {length($_->[-1])} @block[@idx];
  25.         }
  26.         print($_->[0]) for @block;
  27.         $flag = @block = ();
  28. }

  29. __DATA__
  30. module FSN_DLLDELAY_2_1472 ( Z0, Z1, IN0, IN1, S0, S1 );
  31.   input IN0, IN1, S0, S1;
  32.   output Z0, Z1;
  33.   wire n1;

  34.   OAI2XB1_X1N_A9PP84TR_C14 U3 ( .A1N(IN0), .A0(S0), .B0(S1), .Y(Z1) );
  35. endmodule


  36. module usdhc_parts_dll_dly_cell_529 ( loop_out, out, sel_out,
  37.         sel_in, in, loop_in );
  38.   input sel_out, sel_in, in, loop_in;
  39.   output loop_out, out;


  40.   FSN_DLLDELAY_2_1473 u1_sgtl_dtg ( .Z0(out), .Z1(loop_out),
  41.         .IN0(in), .IN1(loop_in), .S0(sel_in), .S1(sel_out) );
  42. endmodule


  43. module FSN_DLLDELAY_2_1473 ( Z0, Z1, IN0, IN1, S0, S1 );
  44.   input IN0, IN1, S0, S1;
  45.   output Z0, Z1;


  46.   NAND2B_X1N_A9PP84TR_C14 U3 ( .AN(S0), .B(IN0), .Y(Z0) );
  47.   MXIT2_X1N_A9PP84TR_C14 U4 ( .A(IN1), .B(Z0), .S0(S1), .Y(Z1) );
  48. endmodule


  49. module usdhc_parts_dll_dly_cell_530 ( loop_out, out, sel_out,
  50.         sel_in, in, loop_in );
  51.   input sel_out, sel_in, in, loop_in;
  52.   output loop_out, out;


  53.   FSN_DLLDELAY_2_1474 u1_sgtl_dtg ( .Z0(out), .Z1(loop_out),
  54.         .IN0(in), .IN1(loop_in), .S0(sel_in), .S1(sel_out) );
  55. endmodule


  56. module FSN_DLLDELAY_2_1474 ( Z0, Z1, IN0, IN1, S0, S1 );
  57.   input IN0, IN1, S0, S1;
  58.   output Z0, Z1;


  59.   NAND2B_X1N_A9PP84TR_C14 U3 ( .AN(S0), .B(IN0), .Y(Z0) );
  60.   MXIT2_X1N_A9PP84TR_C14 U4 ( .A(IN1), .B(Z0), .S0(S1), .Y(Z1) );
  61. endmodule


  62. module usdhc_parts_dll_dly_cell_531 ( loop_out, out, sel_out,
  63.         sel_in, in, loop_in );
  64.   input sel_out, sel_in, in, loop_in;
  65.   output loop_out, out;


  66.   FSN_DLLDELAY_2_1475 u1_sgtl_dtg ( .Z0(out), .Z1(loop_out),
  67.         .IN0(in), .IN1(loop_in), .S0(1'b0), .S1(sel_out) );
  68. endmodule


  69. module FSN_DLLDELAY_2_1475 ( Z0, Z1, IN0, IN1, S0, S1 );
  70.   input IN0, IN1, S0, S1;
  71.   output Z0, Z1;


  72.   INVP_X1R_A9PP84TR_C14 U3 ( .A(IN0), .Y(Z0) );
  73.   MXIT2_X1N_A9PP84TR_C14 U4 ( .A(IN1), .B(Z0), .S0(S1), .Y(Z1) );
  74. endmodule


  75. module usdhc_parts_dll_dly_cell_532 ( loop_out, out, sel_out,
  76.         sel_in, in, loop_in );
  77.   input sel_out, sel_in, in, loop_in;
  78.   output loop_out, out;


  79.   FSN_DLLDELAY_2_1476 u1_sgtl_dtg ( .Z0(out), .Z1(loop_out),
  80.         .IN0(in), .IN1(loop_in), .S0(1'b0), .S1(1'b0) );
  81. endmodule


  82. module FSN_DLLDELAY_2_1476 ( Z0, Z1, IN0, IN1, S0, S1 );
  83.   input IN0, IN1, S0, S1;
  84.   output Z0, Z1;
  85.   wire n2;

  86.   INVP_X1R_A9PP84TR_C14 U4 ( .A(IN0), .Y(Z0) );
  87.   INVP_X1R_A9PP84TR_C14 U3 ( .A(IN1), .Y(Z1) );
  88. endmodule
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP