为什么在 Ruby 中使用 gsub on file with Thor 后会有一个额外的空行?
Why is there an extra blank line after using gsub on file in Ruby with Thor?
我有一些 Ruby 处理 Gemfile 的代码。它添加了一些推荐的 gems 并删除了其他 gems。 Gemfile 的一部分如下所示:
group :development, :test do
# The gem version is a recommended starting place; upgrade if needed.
gem 'pry-rails', '~> 0.3.4'
# Enhance pry with byebug (which gives more debugger commands and other goodies).
# The gem version is a recommended starting place; upgrade if needed.
gem 'pry-byebug', '~> 3.4.0'
# Use rspec for testing
gem 'rspec-rails', '~> 3.5.1'
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platform: mri
end
我正在使用以下两行删除该块的最后两行(gem 'byebug ...
行及其上方的注释)。
gsub_file(full_app_gemfile_path, /^\s*gem\s*("|')byebug.*$/, "", verbose: false)
gsub_file(full_app_gemfile_path, /^\s*#.*Call.*("|')byebug("|').*$/, "", verbose: false)
gsub_file
是Thor
gem提供的方法。删除有效,但我最终在 Gemfile
中得到以下代码
group :development, :test do
# The gem version is a recommended starting place; upgrade if needed.
gem 'pry-rails', '~> 0.3.4'
# Enhance pry with byebug (which gives more debugger commands and other goodies).
# The gem version is a recommended starting place; upgrade if needed.
gem 'pry-byebug', '~> 3.4.0'
# Use rspec for testing
gem 'rspec-rails', '~> 3.5.1'
end
为什么在 group :development, :test do
之后插入额外的空行?它离线路被移除的地方不远。这可能是 Thor gem 中的错误,但我想知道这是否是正则表达式问题。
更新
我刚刚尝试使用原始 ruby gsub(以消除潜在的 Thor 问题)。我创建了一个辅助方法
def my_gsub(path, regex, str)
text = File.read(path)
rep = text.gsub(regex, str)
File.open(path, "w") {|file| file.puts rep}
end
当我将调用 gsub_file
的两行更改为调用 my_gsub
时,我现在在 group :development, :test do
.
之后得到两个空行
对于您的方法my_gsub
,您将替换该行的内容而不替换换行符。要使其也删除换行符,您可以将正则表达式更改为:
gsub_file(full_app_gemfile_path, /^\s*gem\s*("|')byebug.*$\n/, "")
gsub_file(full_app_gemfile_path, /^\s*#.*Call.*("|')byebug("|').*$\n/, "")
我有一些 Ruby 处理 Gemfile 的代码。它添加了一些推荐的 gems 并删除了其他 gems。 Gemfile 的一部分如下所示:
group :development, :test do
# The gem version is a recommended starting place; upgrade if needed.
gem 'pry-rails', '~> 0.3.4'
# Enhance pry with byebug (which gives more debugger commands and other goodies).
# The gem version is a recommended starting place; upgrade if needed.
gem 'pry-byebug', '~> 3.4.0'
# Use rspec for testing
gem 'rspec-rails', '~> 3.5.1'
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platform: mri
end
我正在使用以下两行删除该块的最后两行(gem 'byebug ...
行及其上方的注释)。
gsub_file(full_app_gemfile_path, /^\s*gem\s*("|')byebug.*$/, "", verbose: false)
gsub_file(full_app_gemfile_path, /^\s*#.*Call.*("|')byebug("|').*$/, "", verbose: false)
gsub_file
是Thor
gem提供的方法。删除有效,但我最终在 Gemfile
group :development, :test do
# The gem version is a recommended starting place; upgrade if needed.
gem 'pry-rails', '~> 0.3.4'
# Enhance pry with byebug (which gives more debugger commands and other goodies).
# The gem version is a recommended starting place; upgrade if needed.
gem 'pry-byebug', '~> 3.4.0'
# Use rspec for testing
gem 'rspec-rails', '~> 3.5.1'
end
为什么在 group :development, :test do
之后插入额外的空行?它离线路被移除的地方不远。这可能是 Thor gem 中的错误,但我想知道这是否是正则表达式问题。
更新
我刚刚尝试使用原始 ruby gsub(以消除潜在的 Thor 问题)。我创建了一个辅助方法
def my_gsub(path, regex, str)
text = File.read(path)
rep = text.gsub(regex, str)
File.open(path, "w") {|file| file.puts rep}
end
当我将调用 gsub_file
的两行更改为调用 my_gsub
时,我现在在 group :development, :test do
.
对于您的方法my_gsub
,您将替换该行的内容而不替换换行符。要使其也删除换行符,您可以将正则表达式更改为:
gsub_file(full_app_gemfile_path, /^\s*gem\s*("|')byebug.*$\n/, "")
gsub_file(full_app_gemfile_path, /^\s*#.*Call.*("|')byebug("|').*$\n/, "")