如果所有注释以/* 开头并以 */结尾,如何删除所有注释
我尝试了以下方法。它适用于一行注释。
sed '/\/\*/d'
但它不会删除多行注释。例如第二行和第三行没有被删除。
/*!50500 PARTITION BY RANGE (TO_SECONDS(date_time ))
PARTITION 20120102parti VALUES LESS THAN (63492681600),
(PARTITION 20120101parti VALUES LESS THAN (63492595200) */ ;
在上面的例子中,我需要保留最后一个; 在结束评论标志之后。
最佳答案
如果这是在 C 文件中,那么您必须为此使用 C 预处理器并结合其他工具来临时禁用特定的预处理器功能,例如扩展 #defines 或 #includes,所有其他方法在极端情况下都将失败。这适用于所有情况:
[ $# -eq 2 ] && arg="$1" || arg=""
eval file="\$$#"
sed 's/a/aA/g; s/__/aB/g; s/#/aC/g' "$file" |
gcc -P -E $arg - |
sed 's/aC/#/g; s/aB/__/g; s/aA/a/g'
将它放在一个 shell 脚本中,并使用您要解析的文件的名称调用它,可选地以“-ansi”等标志为前缀,以指定要应用的 C 标准。
见 https://stackoverflow.com/a/35708616/1745001详情。
关于sed - 删除多行注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061785/