将单行脚本变为单行命令的方法?

时间:2017-07-07 13:07:00

标签: ruby

以下是我的"一个班轮"在剧本中。

#!/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 ''中使它工作的方法是什么?

2 个答案:

答案 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)}`