2017-07-07 10 views
0

以下は私の「1ライナー」です。1行のスクリプトを1行のコマンドにする方法はありますか?

#!/usr/bin/ruby 

puts ARGF.read.gsub(/\\caption\{((?:[^{}]+|\{\g<1>\})+)\}/m) { |xx, yy| 
    Regexp.last_match[0].gsub(/([^\\])#/,'\1\\#') } 

私はちょうど私が

-e:1: premature end of char-class: /([^\])#/ 

質問

を取得し、私は二重引用符で

-e:1: syntax error, unexpected $undefined, expecting ')' 
...ast_match[0].gsub(/([^\\])#/,1\#) } 
...        ^

を得るruby -pe ''に挿入した場合そこで質問はへのアプローチは何かということですそれはで動作させる?代わりに、あなたのワンライナーで単一引用符の

+0

これは、単一引用符が含まれていますけど、シェルで使用される文字列をエスケープするための標準的な方法は、このようなものです一重引用符。または、別の引用機構を使用してください。 –

+0

私はエラーでOPを試して更新しました。 –

+0

@mudasobwaあなたは正しいです、コメントが更新されました。 –

答えて

5

使用%q||、それが効果的に同じだが、それは、コマンドラインの単一引用符で台無しにしません:

puts ARGF.read.gsub(RE1) { Regexp.last_match[0].gsub(/([^\\])#/,%q|\1\\#|) } 
0

私はあなたがしようとしているのか分かりませんコマンドラインでの単一引用符でそれを埋め込むときに、あなたが内部をエスケープする必要があり、

require "shellwords" 

`some_command #{Shellwords.escape(some_command_written_in_ruby_string)}` 
関連する問題