Я хочу надежно удалять комментарии, не удаляя новые строки (\n
) и любой кусок существенного кода Matlab командами Unix, а не расширениями/гаджетами/... существующими для цели и т.д. здесь.
Тестовые случаи
%
в другом месте кода, не указывающий на комментарий и т.д. в sprintf('Masi % score')
. sprintf('Masi % score'); % не нужно удалять этот комментарий, потому что хитрый
Я думаю, что 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, ...
Попробуйте следующее:
sed 's/[[:blank:]]*%[^'\'']*$//'
Это удаляет комментарии в конце строки, только если текст комментария не содержит одиночных кавычек. Он оставляет новую строку строки.