我有这个小脚本来可视化没有注释行的配置文件:
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'