如果文件(包括/* */)我怎样才能形象化地删除所有类型的注释?

如果文件(包括/* */)我怎样才能形象化地删除所有类型的注释?

我有这个小脚本来可视化没有注释行的配置文件:

cat $1 | grep -Ev '[:blank]*#|^[:blank]*$' | pygmentize -g

但是当文件包含/* */时,它仍会显示一些注释。

如何可视化文件,删除所有注释,包括 /* */ ?我正在考虑制作一个 bash 脚本,逐行搜索这些注释的开头和结尾。但我想这肯定是更好的方法。

我见过的所有选项(例如这个:http://bit.ly/1BsdcDI) 不处理此类评论。

是否有现成的工具或脚本可以实现这一功能?

如能得到任何帮助,谢谢。

编辑

如上所述,我专门针对配置文件。因此排除规则如下:

  • 以 '#'、';' 或 '//' 开头的任何行
  • 从开头 /* 到 */ 的任何行
  • 不要删除行首没有 /* 的任何行(即在 /* 之前有有效代码)或在行尾之前有 */ 的任何行(即在 */ 之后有有效代码)

解决方案

根据@cusco 的回答和@EdMorton 的代码,我创建了这个 bash 脚本来执行我想要的操作。

#!/bin/bash
[ $# -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' |
          grep -Ev '^[:blank]*#|^[:blank]*$' |
          grep -Ev '^[:blank]*\;|^[:blank]*$' |
          pygmentize -g

答案1

查看https://stackoverflow.com/questions/13061785/remove-multi-line-comments

它有以下脚本

[ $# -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'

相关内容