如何删除ruby的行号?

时间:2014-04-11 15:39:38

标签: ruby regex

像这样的文件中有一些行

1 require 'socket'
2 require  'openssl'
.....

如何删除行号

3 个答案:

答案 0 :(得分:2)

File.write(file_path, File.read(file_path).gsub(/^\d+/, ""))

答案 1 :(得分:2)

从名为" test.txt"的文件样本开始:

1 require 'socket'
2 require  'openssl'

这段代码:

File.open('new_test.txt', 'w') do |fo|
  File.foreach('test.txt') do |li|
    fo.puts li[/^\d+\s(.+)/, 1]
  end
end

我在运行时得到这个:

require 'socket'
require  'openssl'

虽然使用File.readIO.read似乎很方便" slurp"输入文件,并将它们作为一个大字符串处理,它不可扩展。在现实世界中,我们可以获取多GB范围内的文件,啜饮文件会占用系统。

相反,使用逐行IO,如foreach提供的那样。它非常快速,超级高效,一次只读一行。在我用巨型文件完成的基准测试中,就速度而言,它很容易在read范围内,但没有消耗所有RAM的潜在威胁。

li[/^\d+\s(.+)/, 1]applying a regex to a string的简写方式,并提取所需的部分。 /^\d+\s(.+)/a pattern,表示"从字符串的开头开始,找到数字后跟一个空格,然后捕获从那里到行尾的所有内容"。阅读更多关于Ruby在Regexp documentation中正则表达式的实现。

答案 2 :(得分:1)

使用像^\d+\s这样的正则表达式。逐行解析文件并替换行部分使regepx适合空字符串。