Удаление комментариев с unix из sql файла - PullRequest
0 голосов
/ 13 марта 2020

Имея файл sql (пакет), я хочу удалить все комментарии (/*text*/) из файла с UNIX (sed). Вот что я пробовал:

sed 's/[: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;

Спасибо!

1 Ответ

0 голосов
/ 14 марта 2020

Вы можете посмотреть по ссылке, которую @KamilCuk дал в комментарии для специальных инструментов, или использовать GNU sed:

sed -z 's#\*/#\r#g;s#/\*[^\r]*\r\n*##g' file.txt

Объяснение:
Сначала замените */ уникальным символом (я буду используйте \r, потому что вы уже должны были удалить окончания строки Windows). Далее вы можете удалить комментарий.
Использование опции -z предназначено для сопоставления комментариев, которые длятся более 1 строки, и удаления новой строки после конца комментария.

...