以下是我的"一个班轮"在剧本中。
#!/usr/bin/ruby
puts ARGF.read.gsub(/\\caption\{((?:[^{}]+|\{\g<1>\})+)\}/m) { |xx, yy|
Regexp.last_match[0].gsub(/([^\\])#/,'\1\\#') }
如果我只是插入ruby -pe ''
我
-e:1: syntax error, unexpected $undefined, expecting ')'
...ast_match[0].gsub(/([^\\])#/,1\#) }
... ^
我用双引号
-e:1: premature end of char-class: /([^\])#/
问题
所以问题是在ruby -pe ''
中使它工作的方法是什么?
答案 0 :(得分:5)
在你的单行中使用%q||
而不是单引号,它实际上是相同的,但它不会搞乱命令行单引号:
puts ARGF.read.gsub(RE1) { Regexp.last_match[0].gsub(/([^\\])#/,%q|\1\\#|) }
答案 1 :(得分:0)
我不知道你要做什么,但是逃避在shell中使用的字符串的标准方法是这样的:
require "shellwords"
`some_command #{Shellwords.escape(some_command_written_in_ruby_string)}`