루비에 파일 포함을 구현하는 간단한 방법은 무엇입니까? 텍스트 파일에 {{{stuff.txt}}}가 포함되어 있으면 stuff.txt의 내용이 인라인에 포함됩니다. 나는 이런 식으로 생각했다 :파일을 포함하는 전처리 기
cat prog | ruby -pe 'gsub /{{{.+}}}/, File.open("$0").read'
... eval() 관련되어 있지만 작동하지 않을 수 있습니다.
루비에 파일 포함을 구현하는 간단한 방법은 무엇입니까? 텍스트 파일에 {{{stuff.txt}}}가 포함되어 있으면 stuff.txt의 내용이 인라인에 포함됩니다. 나는 이런 식으로 생각했다 :파일을 포함하는 전처리 기
cat prog | ruby -pe 'gsub /{{{.+}}}/, File.open("$0").read'
... eval() 관련되어 있지만 작동하지 않을 수 있습니다.
를 교체를 계산하기 위해 블록을 사용할 필요가 Alex D의 .+
은 욕심 많고 가능한 한 많은 문자와 일치합니다. 반면에 .+?
은 가능한 한 자로 일치하려고합니다.
Ruby의 명령 줄 -p
은 $_
변수 값을 업데이트해야합니다. 따라서 gsub
대신 gsub!
을 사용하여 사본을 만듭니다. -n
을 사용하면 같은 결과를 얻을 수 있습니다.
cat prog | ruby -ne 'puts $_.gsub(/{{{(.+?)}}}/) { File.read $1 }'
s.gsub(/{{{(.+?)}}}/) { |m| File.read($1) }
몇 점 :..
cat prog | ruby -pe '$_.gsub!(/{{{(.+?)}}}/) { File.read $1 }'
시도 명령 줄에서 바로 그것을하고 싶은 경우 (이 동적이기 때문에)
또한, 블록 내부에 당신은 $ 0에서 $ 세계 1 변수를 사용할 수 있습니다 : 's.gsub을 (/ \ {\ {\ {(+) \} \} \.?}) {File.read ($ 1)}'(정규 표현식에 그룹핑을 추가 한 것에 유의하십시오.) –
좋은 지적, 감사합니다. –
Ruby의 정규 표현식에서 '{'와 '}'는 특수 문자가 아닙니다. ''{a} '= ~/{a}/# => 0'. – Jan
이것은 훌륭한 설명이며 완벽하게 작동합니다. 감사합니다. – mahemoff