像这样的文件中有一些行
1 require 'socket'
2 require 'openssl'
.....
如何删除行号
答案 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.read
或IO.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适合空字符串。