
Luaファイルからコメントを削除する必要があるbashスクリプトを作成しています。形式は次のとおりです。
--like this
foo="bar" --or like this
--[[ or like this ]]
--[[
or
like
this
]]
1行コメントを削除するために使用できることを知っていますが、sed 's/--.*$//' ${my_file}
複数行コメントを解決する方法は何ですか?
ありがとうございます!
答え1
いいえ、これは正規表現エンジンの仕事ではありません。たとえば、合法的にまたは文字列を持つことができます--
。]]
文字列はで終わりますが、"
で終わりません\"
。
プログラミング言語のアイデアは正規表現に簡単にマッピングされません(場合によってはまったくそうではありませんが、これは構文理論の練習です)。
私自身は言語理論家ではありませんが、Luaには正規文法が定義されていないため、正規表現で構文解析できない可能性があると思います。
これを達成する方法は語彙アナライザ、ファイルを文字ごとに読み、次のように分割します。トークン"
(たとえば、aが表示されたときに開始し、unescapedが表示されたときに終了する文字列トークンです"
。)すべてのトークンを発行します。いいえコメント。
答え2
すべての複数行一致がstart--[[
とendであると仮定すると、範囲一致を使用して複数行一致と1行一致の両方を処理できます]]
。
$ 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