我正在考虑尝试从我们的补丁文件中删除 C 注释,并查看了许多正则表达式,但如果我们从补丁中删除行 - 它会破坏它们。
您将如何编写正则表达式或 sed 命令来搜索 diff 补丁文件中的注释并用空格替换注释行。
这适用于 sed 正则表达式适用于 C 文件,但对于补丁我需要一些不同的东西:
sed '/^\/\*/,/\*\//d'
一个示例补丁摘录是:
@@ -382,7 +391,109 @@
return len;
}
+/**********************************************************************************
+ * Some patch
+ * Author: Mcdoomington
+ * Do somethimg
+ *
+ * fix me
+ **********************************************************************************/
有人有想法吗?
编辑:
使用此过滤器:
sed -e 's,^+ \*.*,+ \/\/Comment removed,' mypatch.patch > output
+/**********************************************************************************
+ //Comment removed
+ //Comment removed
+ //Comment removed
如何添加以 \ 结尾的 if 行以跳过它?
编辑:解决方案
虽然不是最干净的方式 - 我将 sed 与陪审团操纵的正则表达式一起使用。
sed -e '/[^\*\/]$/{N;s,^+ \* .*,+ \* Comment removed,;}' patch > output
sed -e '/[^\*\/]$/{N;s,^+\\\* .*,+ \/\* Comment removed,;}' patch > output
请注意,第二个命令可能有点过于贪婪,但出于清理评论的目的 - 这行得通!
这个怎么运作:
1.)第一个命令要确定这是否是注释的结尾 /[^*/]$/ 确定它是否是/ 然后 {N;s,^+\* 。,+ /* 已删除评论,;}' 找到 +*(无论如何)并将其替换为 * 已删除评论。
2.) 第二个命令要确定这是否是注释的结尾 /[^*/]$/ 确定它是否是/ 然后 {N;s,^+\* 。,+ /* Comment removed,;}' 找到 + * (whatever) 并将其替换为 * Comment removed。