如何删除 bash 脚本中的多行 (Lua) 注释?

如何删除 bash 脚本中的多行 (Lua) 注释?

我正在编写一个 bash 脚本,需要从 Lua 文件中删除注释,其格式为:

--like this

foo="bar" --or like this

--[[ or like this ]]

--[[
    or
    like
    this
]]

我知道我可以用来sed 's/--.*$//' ${my_file}删除单行注释,但是如何解决多行注释呢?

谢谢!

答案1

不,这并不是正则表达式引擎的工作。例如,您可以在字符串中完全合法地拥有--或。]]字符串以 结尾",但不以 结尾\"

编程语言的思想并不容易映射(在某些情况下,根本不是,但这成为语法理论的练习)到正则表达式。

我自己不是语言理论家,但我认为 lua 可能没有定义正则语法,因此可能无法被正则表达式解析。

实现这一点的方法是构建一个词法分析器,它逐个字符地读取文件,并将它们分为代币(例如,这是一个字符串标记,当您看到 a 时开始",当您看到未转义的 时结束")。您发出所有令牌不是评论。

答案2

假设所有多行匹配都以 开头--[[和结尾]],您可以使用范围匹配来处理多行和单行匹配。

$ sed '/^--\[\[/,/\]\]/d' input_file
--like this

foo=bar --or like this


实现您的原始代码现在可以清除与先前命令不匹配的剩余注释。

$ sed '/^--\[\[/,/\]\]/d;s/--.*$//' input_file


foo=bar


为了清理,也可以删除空行。

$ sed '/^--\[\[/,/\]\]/d;s/--.*//;/^$/d' input_file
foo=bar

相关内容