如何在ruby中用字符串查找和替换模式?

如何在ruby中用字符串查找和替换模式?,ruby,regex,shell,Ruby,Regex,Shell,我的档案是: [root@test etc]# cat nrpe.cfg command[check_users]=/usr/local/nagios/libexec/check_users -w 30 -c 35 command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20 command[check_disk]=/usr/local/nagios/libexec/chec

我的档案是: [root@test etc]# cat nrpe.cfg
command[check_users]=/usr/local/nagios/libexec/check_users -w 30 -c 35 command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20 command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1 command[check_hda]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sdb command[check_procs]=/usr/local/nagios/libexec/check_procs -w 200 -c 250 我想用ruby中的/dev/xvda1替换/dev/sdb,您可以使用,或者根据行中出现的次数:

line = "command[check_hda]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sdb"
line.gsub("/dev/sdb", "/dev/xvda1")
#=> "command[check_hda]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/xvda1"
由于它位于文件中,因此您可以迭代为:

File.open("/your/file", "r") { |file| file.each_line { |line|
puts line.gsub("/dev/sdb", "/dev/xvda1")
}}

首先,让我们将文本写入文件:

str =<<BITTER_END
command[check_users]=/usr/local/nagios/libexec/check_users -w 30 -c 35
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
command[check_hda]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sdb
command[check_procs]=/usr/local/nagios/libexec/check_procs -w 200 -c 250
BITTER_END

Fname_in  = "in"
Fname_out = "out"

File.write(Fname_in, str)
  #=> 390
让我们确认它是否有效:

puts File.read(Fname_out)
command[check_users]=/usr/local/nagios/libexec/check_users -w 30 -c 35
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
command[check_hda]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/xvda1
command[check_procs]=/usr/local/nagios/libexec/check_procs -w 200 -c 250

gsub和sub之间有什么区别?gsub将替换所有出现的图案,sub将仅替换第一个出现的图案。我已经在我的答案中提供了链接,请浏览文档。
puts File.read(Fname_out)
command[check_users]=/usr/local/nagios/libexec/check_users -w 30 -c 35
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
command[check_hda]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/xvda1
command[check_procs]=/usr/local/nagios/libexec/check_procs -w 200 -c 250