Sed 从sql文件中删除unix注释

Sed 从sql文件中删除unix注释,sed,Sed,有了sql文件(包),我想用UNIX(sed)从文件中删除所有注释(/*text*/)。 这就是我尝试过的: sed的/[:blank:*-~.[\n]*.-$/'file.txt 换行符似乎不是这样工作的。有什么建议吗? 应将其从管路3至8中拆下。第15行 SQL文件: CREATE OR REPLACE PACKAGE BODY MYSCHEMA.MYPACKAGE AS /***********************************************************

有了sql文件(包),我想用UNIX(
sed
)从文件中删除所有注释(
/*text*/
)。 这就是我尝试过的:

sed的/[:blank:*-~.[\n]*.-$/'file.txt

换行符似乎不是这样工作的。有什么建议吗? 应将其从管路3至8中拆下。第15行

SQL文件:

CREATE OR REPLACE PACKAGE BODY MYSCHEMA.MYPACKAGE
AS
/***************************************************************************
    Author         : myname
    Date 10/2019
    Overview       : This is the main control procedure
   Major Modifications (initial, when, ver, irfs, description):
***************************************************************************/
PROCEDURE MYPROCEDURE (p_error        IN OUT   NUMBER,
                                        p_return_code     IN OUT   NUMBER,
                                        p_error_message   IN OUT   VARCHAR2)
AS
v_infomsgid             NUMBER;
BEGIN
/*This is my comment about this process*/
   MY_SQL_CODE_HERE;
END;
END MYPACKAGE;
所需的输出如下:

CREATE OR REPLACE PACKAGE BODY MYSCHEMA.MYPACKAGE
AS
PROCEDURE MYPROCEDURE (p_error        IN OUT   NUMBER,
                                        p_return_code     IN OUT   NUMBER,
                                        p_error_message   IN OUT   VARCHAR2)
AS
v_infomsgid             NUMBER;
BEGIN
   MY_SQL_CODE_HERE;
END;
END MYPACKAGE;

谢谢

您可以查看@KamilCuk在专用工具评论中提供的链接,或使用
GNU-sed

sed -z 's#\*/#\r#g;s#/\*[^\r]*\r\n*##g' file.txt
说明:
首先将
*/
替换为唯一字符(我将使用
\r
,因为您应该已经删除了Windows行结尾)。接下来,您可以删除注释。

使用选项
-z
用于匹配持续超过1行的注释,并在注释结束后删除换行符。

请将该示例输入的所需输出(无说明)添加到您的问题(无注释)中。使用
sed
几乎不可能,因为regex是贪婪的,并且没有lookarounds。像
/*comment*/code/*comment*/
这样的行会很难。这能回答你的问题吗?如果您想删除
/text/
,那么您的示例中的内容就是一个问题:
2019年10月
@Cyrus我编辑了这个问题,OP没有在
/*text*/
周围使用反引号。