1

在 Ruby 中实现文件包含的简单方法是什么,例如,如果文本文件包含 {{{stuff.txt}}},则 stuff.txt 的内容被包含在内。我想也许是这样的:

cat prog | ruby -pe 'gsub /{{{.+}}}/, File.open("$0").read'

...涉及 eval() ,但无法使其正常工作。

4

2 回答 2

2
s.gsub(/{{{(.+?)}}}/) { |m| File.read($1) }

几点:

  • .+ 和 .+? 之间有一个重要的区别。使用 .+,很容易制作吃太多字符的正则表达式。
  • 您需要使用块来计算替换(因为它是动态的)
于 2012-01-21T11:21:08.327 回答
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 }'
于 2012-01-21T11:28:59.117 回答