2015-12-21 15 views
0

这是我的问题,我想用SVN的关键字在PL/SQL代码注释中。 问题是,在编译时,制作时CREATE OR REPLACE上方的注释会被渲染。如何在PL/SQL文件中插入注释行

然后要做到这一点,我必须添加评论行就在行CREATE OR REPLACE [name] [AS/IS]后面。 我的问题是,我绝对不知道如何处理Shell脚本。 我想我会用awk但我不是这个工具的高手都:S

对于为例我有这样的文件:

-- Comments here will be deleted when compiling 
-- That's why i must had my comment after the CREATE OR REPLACE 
CREATE OR REPLACE PACKAGE BODY example_file 
IS 
    ------------------------------------------------------------- 
    -- Version  Date   Person Comments 
    ------------------------------------------------------------- 
    CODE 
    . 
    . 
    . 

而且我想这样的一个文件:

-- Comments here will be deleted when compiling 
-- That's why i must had my comment after the CREATE OR REPLACE 
CREATE OR REPLACE PACKAGE BODY example_file 
IS 
    -- REVISION $Revision$ 
    -- ID $Id$ 
    ------------------------------------------------------------- 
    -- Version  Date   Person Comments 
    ------------------------------------------------------------- 
    CODE 
    . 
    . 
    . 

当然我可以在每个文件中一个一个地写。但是有很多文件,这就是为什么我正在寻找一种更快的方法。

感谢,

结。

+0

这是更好的方式。格式始终是“CREATE OR REPLACE ...”+新行+“IS”? – fedorqui

+0

格式可以是这样的: 'CREATE OR REPLACE ...'[new line]'IS'或 'CREATE OR REPLACE ...'[新行]'AS'或 'CREATE OR REPLACE ... IS' [新行]或 'CREATE OR REPLACE ... AS' [新行] –

回答

1

awk来救援!

$ awk '/CREATE OR REPLACE/{n=NR} 
      /^IS/ && NR==n+1{print; 
          print " -- REVISION ..."; 
          print " -- ID ..."; 
          next 
          } 1' sql 

标记第一个模式“CREATE ...”,如果下一行以“IS”开始,则插入两条注释行。

UPDATE:现在看起来为AS或IS,而不是仅仅在下一行,但在同一行和其后的行

设置之间3
$ awk  '/CREATE OR REPLACE/{n=NR} 
    /\yIS|AS\y/ && n<=NR && NR<=n+3{ 
      print; 
      print " -- REVISION ...\n -- ID ..."; 
      next} 1' sql 

变量n与行号时第一模式相匹配,搜索在3行邻域内的第二个模式,并在匹配后插入行。

+0

不错!请注意[还有一些格式的其他可能性](http://stackoverflow.com/questions/34400005/how-to-insert-a-commentary-line-in-a-pl-sql-file#comment56542102_34400005)。 – fedorqui

+0

感谢您的回答我已经添加了'/ ^(IS | AS)/'来处理这两种形式的[[新行] + AS或IS',但是当它在同一行上时,我被阻止, n = NR}'是指?我有这样的想法,比如说'/ CREATE OR REPLACE/{n = NR}/^ IS/||/CREATE OR REPLACE/{n = NR} /(IS | AS)' 但它不起作用,因为我不知道如何在awk中正确写入它:( –

+0

这是好的人!!非常感谢我终于明白awk是如何工作的!我理解你的NR == n + 1等等,看看它是不是只是下一行!当你知道如何使用它时,Awk是一个非常酷的工具! –

0

一个gawk解决方案来处理ASIS排列:

gawk '/^--/ && f < 2 {comment[++c]=$0;next} 
    /CREATE OR REPLACE/{++f;create=$0} 
    /\y(IS|AS)\y/{ 
       print create 
       if ($0!=create) { 
       print $0 
       } 
       ++f 
       for (j=1;j<=c;j++){ 
       print comment[j] 
       } 
       next 
    } 
    f==2 {print} ' source.sql 

结果

CREATE OR REPLACE PACKAGE BODY example_file 
IS 
-- Comments here will be deleted when compiling 
-- That's why i must had my comment after the CREATE OR REPLACE 
    ------------------------------------------------------------- 
    -- Version  Date   Person Comments 
    ------------------------------------------------------------- 
    CODE 
    . 
    . 
    . 
+0

感谢你的回答,我在你的回答中记住了,但实际上我只是'awk',并且由于系统原因我无法安装'gawk'。 我真的不明白你的解决方案的“目标”,它如何处理'AS | IS'排列形式?当我看到你的例子时,我并不清楚^^ –

相关问题