在 Ruby 中实现文件包含的简单方法是什么,例如,如果文本文件包含 {{{stuff.txt}}},则 stuff.txt 的内容被包含在内。我想也许是这样的:
cat prog | ruby -pe 'gsub /{{{.+}}}/, File.open("$0").read'
...涉及 eval() ,但无法使其正常工作。
在 Ruby 中实现文件包含的简单方法是什么,例如,如果文本文件包含 {{{stuff.txt}}},则 stuff.txt 的内容被包含在内。我想也许是这样的:
cat prog | ruby -pe 'gsub /{{{.+}}}/, File.open("$0").read'
...涉及 eval() ,但无法使其正常工作。
s.gsub(/{{{(.+?)}}}/) { |m| File.read($1) }
几点:
如果您想直接从命令行执行此操作,请尝试
cat prog | ruby -pe '$_.gsub!(/{{{(.+?)}}}/) { File.read $1 }'
正如 Alex D 所指出的,.+
它是贪婪的,并且匹配尽可能多的字符。另一方面,.+?
尝试匹配尽可能少的字符。
Ruby 的命令行-p
希望您更新$_
变量的值。因此使用 mutatinggsub!
而不是gsub
,这会产生副本。使用 可以达到相同的结果-n
。
cat prog | ruby -ne 'puts $_.gsub(/{{{(.+?)}}}/) { File.read $1 }'