Bash 스크립트에서 여러 줄(Lua) 주석을 제거하는 방법은 무엇입니까?

Bash 스크립트에서 여러 줄(Lua) 주석을 제거하는 방법은 무엇입니까?

Lua 파일에서 주석을 제거해야 하는 bash 스크립트를 작성 중입니다. 형식은 다음과 같습니다.

--like this

foo="bar" --or like this

--[[ or like this ]]

--[[
    or
    like
    this
]]

한 줄 주석을 제거하는 데 사용할 수 있다는 것을 알고 있지만 sed 's/--.*$//' ${my_file}여러 줄 주석을 해결하는 방법은 무엇입니까?

감사해요!

답변1

아니요, 이는 정규식 엔진의 작업이 아닙니다. 예를 들어, 합법적으로 또는 문자열을 가질 수 있습니다 --. ]]문자열이 로 끝나지만 "로 끝나지 않습니다 \".

프로그래밍 언어 아이디어는 정규식에 쉽게 매핑되지 않습니다(어떤 경우에는 전혀 그렇지 않지만 이는 구문 이론의 연습이 됨).

나 자신은 언어 이론가는 아니지만, 루아에는 정규 문법이 정의되어 있지 않기 때문에 정규 표현식으로 구문 분석하지 못할 수도 있다고 생각합니다.

이를 달성하는 방법은어휘 분석기, 파일을 문자별로 읽어서 다음과 같이 나눕니다.토큰"(예를 들어, 이는 a가 보일 때 시작 하고 unescaped가 보일 때 끝나는 문자열 토큰입니다 ".) 모든 토큰을 발행합니다.아니요논평.

답변2

모든 여러 줄 일치가 start --[[및 end 라고 가정하면 범위 일치를 사용하여 여러 줄 일치와 한 줄 일치를 모두 처리할 수 있습니다 ]].

$ 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

관련 정보