Я ищу попытку вырезать комментарии C из наших файлов патчей и посмотрел на многочисленные регулярные выражения, но если мы удалим строки из наших патчей - это сломает их.Метод снятия комментариев с C из файлов исправлений
Как вы могли бы написать команду regex или sed для поиска файлов исправлений diff для комментариев и замены строк комментариев пробелами.
Это работает SED регулярных выражений работает для файлов C, но для патчей мне нужно что-то другое:
sed '/^\/\*/,/\*\//d'
Пример патч отрывок будет:
@@ -382,7 +391,109 @@
return len;
}
+/**********************************************************************************
+ * Some patch
+ * Author: Mcdoomington
+ * Do somethimg
+ *
+ * fix me
+ **********************************************************************************/
Кто-нибудь есть идеи?
Edit:
С помощью этого фильтра:
sed -e 's,^+ \*.*,+ \/\/Comment removed,' mypatch.patch > output
+/**********************************************************************************
+ //Comment removed
+ //Comment removed
+ //Comment removed
Как добавить, если строка заканчивается \, чтобы пропустить его?
Edit: Решение
Хотя не самый чистый путь - я использовал СЭД с регулярным выражением присяжных оснасткой.
sed -e '/[^\*\/]$/{N;s,^+ \* .*,+ \* Comment removed,;}' patch > output
sed -e '/[^\*\/]$/{N;s,^+\\\* .*,+ \/\* Comment removed,;}' patch > output
Примечание второй команда может быть немного слишком жадной, но для целей дезинфицирующих комментариев - это работает!
Как это работает:
1.) Первая команда Чтобы определить, является ли это конец комментария/[^ * /] $/определяет, будет ли это /, то {N; s,^+ \ *., +/* Комментарий удален ,;} 'находит + * (что угодно) и заменяет его на * Комментарий удален.
2.) Вторая команда Чтобы определить, является ли это концом комментария/[^ * /] $/определяет, является ли оно /then {N; s,^+ \ *., +/* Комментарий удален ,;} 'находит + * (что угодно) и заменяет его на * Комментарий удален.
Являются ли файлы патчей входящими или вы их генерируете? Все ли комментарии, которые вы хотите переместить, или просто блокировать комментарии между функциями? –
Файлы патчей уже созданы, и я искал простой способ удалить комментарии или, по крайней мере, пропустить их. Создание новых патчей - огромная задача из-за промежуточной среды, и они составляют около 30+. – mcdoomington
Существует точка, в которой регулярные выражения просто не являются умными или достаточно гибкими, чтобы делать то, что вы хотите; это один из таких случаев. Вы должны уметь распознавать символы '/ *', '* /' и '//' token и обрабатывать файл соответствующим образом. Лично я просто рубил свой собственный фильтр для такой работы; не должно занимать больше двух часов. –