【问题标题】:Identify multi-line SQL comments /* ... */识别多行 SQL 注释 /* ... */
【发布时间】:2014-05-24 07:40:23
【问题描述】:

我正在尝试使用 pandoc 将 SQL 函数源代码转换为 html 文档。我有一个示例函数:

create or replace function test(a integer, b integer) returns integer as $$

declare
  _c int;
  _d int;

begin

/*Do some basic stuff
----------------------
Do some really basic stuff:

 - this is a list
 - this is a list */

if a = b then
    _c:=a+b;
end if; 

/*Do some more advanced stuff
----------------------------
Description of some advanced stuff */

if a <> b then
    _d:=a*b;
end if;

  return 1;
end;
$$ language plpgsql;

我在 cmets 中使用 markdown。要将整个文件转换为有效的降价语法,我需要:

  • 在代码所在的每一行的开头添加空格
  • 删除评论标签 (/* */)

虽然在开头添加空格很容易:

$ sed 's/^/    /' function.sql

同时删除评论标签:

$ sed 's/\/\*//' function.sql
$ sed 's/\*\\//' function.sql

我不知道如何排除 cmets 所在的行。

输出应如下所示:

    create or replace function test(a integer, b integer) returns integer as $$

    declare
      _c int;
      _d int;

    begin

Do some basic stuff
----------------------
Do some really basic stuff:

 - this is a list
 - this is a list

    if a = b then
        _c:=a+b;
    end if; 

Do some more advanced stuff
----------------------------
Description of some advanced stuff

    if a <> b then
        _d:=a*b;
    end if;

      return 1;
    end;
    $$ language plpgsql;

【问题讨论】:

标签: regex replace sed multiline pandoc


【解决方案1】:

利用标签,一次完成所有事情:

sed '/^\/\*/,/\*\//{s|^/\*||; s|\*/$||; b a};s/^/    /;:a' filename

这将缩进除 /**/ 之间的所有行,并从这些块中删除 cmets。

对于您的输入,它会产生:

    create or replace function test(a integer, b integer) returns integer as $$

    declare
      _c int;
      _d int;

    begin

Do some basic stuff
----------------------
Do some really basic stuff:

 - this is a list
 - this is a list 

    if a = b then
        _c:=a+b;
    end if; 

Do some more advanced stuff
----------------------------
Description of some advanced stuff 

    if a <> b then
        _d:=a*b;
    end if;

      return 1;
    end;
    $$ language plpgsql;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 2017-09-09
    • 1970-01-01
    相关资源
    最近更新 更多