Bash脚本:删除其他Bash脚本中的所有注释
因此,基本上,标题说明了我需要做的事情:删除其他bash脚本中的所有注释,除了/当然了。注释可以位于行的开头,也可以位于代码行之后的行的末尾 我已经浏览了以下线程: , 但没有一个真正起到帮助作用,目前,我坚持这样做: sed-e'2,$s/^/d'myscript.sh 这应该会删除行开头的注释,但不会。 你知道什么地方可能出错以及如何解决整个任务吗?删除s,不涉及替换。要运行的命令是d:delete。另外,/^/是地址,但2$也是地址,不能合并地址。因此,使用{}创建一个内部作用域,您可以在其中使用另一个地址:Bash脚本:删除其他Bash脚本中的所有注释,bash,unix,sed,Bash,Unix,Sed,因此,基本上,标题说明了我需要做的事情:删除其他bash脚本中的所有注释,除了/当然了。注释可以位于行的开头,也可以位于代码行之后的行的末尾 我已经浏览了以下线程: , 但没有一个真正起到帮助作用,目前,我坚持这样做: sed-e'2,$s/^/d'myscript.sh 这应该会删除行开头的注释,但不会。 你知道什么地方可能出错以及如何解决整个任务吗?删除s,不涉及替换。要运行的命令是d:delete。另外,/^/是地址,但2$也是地址,不能合并地址。因此,使用{}创建一个内部作用域,您可以
sed '2,${/^#/d}'
请注意,行尾的注释将被保留:
x=42 # The answer to ...
为了删除它们,您需要解析这些命令。这可不是小事。也许可以使用语法突出显示正确的现有解决方案,并使用其逻辑来识别注释?就整个解决方案而言,举个例子:
#!/bin/bash
fsdfsdf
sdfsfds
#sdfdsfsdf
sdfsdf
#sdfsdfdf
#sdfsdf
#sdfdsf
sfdsdfsfsdf #fgdgfgdgdfg
dasdasd
asdsad
asdsadsd #dsadsadsad
#dasdsadsa
sed -e '2,${/^#/d}' file | sed -r '/^.*#/{s/([^#])(#.*$)/\1/}'
第一个sed语句将处理从2到文件末尾的行,并删除以开头的任何行。然后,该输出通过管道传输到另一个sed语句,该语句搜索包含a的任何行,然后将该行拆分为两个部分,将该行替换为第一部分,仅替换代码而不是注释删除s,您不是在替换,而是在删除。/^/part是地址,而不是s//.sed-e'2,${/^/d}'myscript.shGood advice的一部分。有一个很好的替代方案,它只使用env和bash本身。是的,非常感谢,它使代码的一半工作正常。出于某种原因,我认为d选项是一个标志,因此必须位于sed构造的末尾。这会中断数组长度${array[@]}或参数替换${array*}。