sed - 删除多行注释

标签 sed awk

如果所有注释以/* 开头并以 */结尾,如何删除所有注释
我尝试了以下方法。它适用于一行注释。

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/

相关文章:

BASH 通过 AWK 添加 ServerName 到 Apache.conf

linux - 向 CSV 文件中的所有行添加 2 小时 - CentOS

vim - 转换文件每行一个字

linux - 将命令的输出附加到大文件中的每一行

linux - 替换匹配行中的某些位置

sed 在数字指定的行后插入文件内容

linux - 如何使用 sed 删除/添加模式匹配上的行

unix - 根据每个文件之间的空行将文本文件的段落拆分为多个文件

regex - 在linux中使用awk进行文件比较

linux - 编写一个 bash 脚本来比较两个比较时间戳的日志文件