2015-12-21 14 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'排列形式?當我看到你的例子時,我並不清楚^^ –

相關問題