Как надежно удалить большинство комментариев в коде Matlab?

Я хочу надежно удалять комментарии, не удаляя новые строки (\n) и любой кусок существенного кода Matlab командами Unix, а не расширениями/гаджетами/... существующими для цели и т.д. здесь. Тестовые случаи

  1. Символ % в другом месте кода, не указывающий на комментарий и т.д. в sprintf('Masi % score').
  2. Игнорировать хитрые и т.д. sprintf('Masi % score'); % не нужно удалять этот комментарий, потому что хитрый
  3. ...

Я думаю, что SED может работать хорошо. Некоторые попытки

  • Попытка 1 ошибочна, потому что удаляет новые строки и не проходит тест 1

    # http://stackoverflow.com/a/3350246/54964
    sed -e 's/%.*$//' -e '/^$/d' inputFile.m
    
    ## Выход 
    function blalala(var2);
    var=1; 
    hello=2; 
    assert(indexPositionEnd >= indexPositionStart, 'indexEnd больше/равно indexStart');
    index=index+1
    pause(1); 
    sprintf('Masi 
    end
    
  • Попытка 2 ошибочна, так как включает в вывод только первую строку

    # http://stackoverflow.com/a/1252191/54964
    sed ':a;N;$!ba;s/%.*$/ /g' inputFile.m
    
    ## Вывод 
    function blalala(var2);
    

Пример inputFile.m как файл данных

function blalala(var2);
%% synapse
% describe here pla la
%
var=1;      
% 
hello=2; 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                      Statistics and Monitoring
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

assert(indexPositionEnd >= indexPositionStart, 'indexEnd bigger/equal than indexStart');

index=index+1

%% Situation monitoring at the end
pause(1); % waitforbuttonpress pause is not sufficient

% http://stackoverflow.com/a/111322....

sprintf('Masi % score').
sprintf('Masi % score'); % do not need to remove this comment because tricky

end

ОС: Debian 8.5 64 bit
Инструменты: SED, Python, Perl, ...

0
05.10.2016, 15:54
2 ответа

Я нашел ответ . Установите цвет комментариев такой же, как у фона.

0
28.01.2020, 02:47

Попробуйте следующее:

sed 's/[[:blank:]]*%[^'\'']*$//' 

Это удаляет комментарии в конце строки, только если текст комментария не содержит одиночных кавычек. Он оставляет новую строку строки.

1
28.01.2020, 02:47

Теги

Похожие вопросы