bash – 使用sed删除文件中的所有注释

前端之家收集整理的这篇文章主要介绍了bash – 使用sed删除文件中的所有注释前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使用sed从文件(用#定义)中删除所有注释,关于字符串中的’#’?

除了字符串部分外,This帮了很多忙.

如果#总是表示评论,并且可以出现在一行的任何地方(如某些代码之后):
sed 's:#.*$::g' <file-name>

如果要在适当的位置更改它,请添加-i开关:

sed -i 's:#.*$::g' <file-name>

这将从任何#删除到行尾,忽略任何上下文.如果你在任何不是注释的地方使用#(比如在字符串中),它也会删除它.

如果评论只能从一行的开头开始,请执行以下操作:

sed 's:^#.*$::g' <file-name>

如果它们之前可能有空格,但没有别的,可以:

sed 's:^\s*#.*$::g' <file-name>

这两个会更安全一些,因为它们可能不会删除代码中#的有效用法,例如字符串.

编辑:

没有一种很好的方法来检测某些东西是否在字符串中.如果能满足你语言的限制,我会使用最后两个.

检测您是否在字符串中的问题是正则表达式无法执行所有操作.有一些问题:

>字符串可能跨越线条
>正则表达式无法区分叛逆者与单引号之间的区别
>正则表达式不能匹配嵌套引号(这些情况会混淆正则表达式):

# "hello there"
# hello there"
"# hello there"

如果双引号是定义字符串的唯一方法,双引号将永远不会出现在注释中,并且字符串不能跨越多行,请尝试以下方法

sed 's:#[^"]*$::g' <file-name>

这是很多先决条件,但如果他们都坚持下去,你就是在做生意.否则,我担心你是SOL,你最好用Python之类的东西来编写它,在那里你可以做更高级的逻辑.

猜你在找的Bash相关文章