用ruby替换文件中的字符串
我正在尝试创建一个程序,该程序读取用ruby替换文件中的字符串,ruby,regex,loops,file-io,Ruby,Regex,Loops,File Io,我正在尝试创建一个程序,该程序读取ps,并输出pid和commandline,但是如果进程是由内核启动的,它应该返回一个空行 require 'fileutils' procs=`ps -eo pid,cmd` o = File.open("proc","w") f = o.write("proc") o.close f_in = File.open('proc', 'r') f_out = File.open('procs', 'w') replace = "" f_in.each d
ps
,并输出pid
和commandline
,但是如果进程是由内核启动的,它应该返回一个空行
require 'fileutils'
procs=`ps -eo pid,cmd`
o = File.open("proc","w")
f = o.write("proc")
o.close
f_in = File.open('proc', 'r')
f_out = File.open('procs', 'w')
replace = ""
f_in.each do |line|
if line =~ (/\s*\[(\w+)\]\$/)
f_out << "\n"
else
f_out << line
end
end
f_out.write("procs")
f_in.close
f_out.close
FileUtils.mv "procs", ["proc", Time.now.strftime("%Y-%m-%d")].join(".")
需要“fileutils”
procs=`ps-eo pid,cmd`
o=文件打开(“proc”、“w”)
f=o.write(“过程”)
o、 接近
f_in=File.open('proc','r')
f_out=File.open('procs','w')
replace=“”
f|u in.每条do|线|
如果行=~(/\s*\[(\w+)\]\$/)
就这么做吧
string.gsub(/\[.*?\]/, '')
或
照办
string.gsub(/\[.*?\]/, '')
或
这看起来可以做到:
File.open("proc.#{ Time.now.strftime('%F') }", 'w') do |fo|
fo.puts `ps -eo pid,cmd`.lines.map{ |li| li[ /^([^\[]+)/, 1] }
end
li[/^([^\[]+)/,1]
的意思是“从行首捕获所有不是“[
”的内容并返回它
它创建了一个名为“proc.2011-04-16”的文件,该文件如下所示:
PID CMD
1 /sbin/init
2
3
4
5
[...]
255 upstart-udev-bridge --daemon
296 rsyslogd -c4
303 dbus-daemon --system --fork
315 udevd --daemon
398 avahi-daemon: running
443 avahi-daemon: chroot helper
493
[...]
这看起来可以做到:
File.open("proc.#{ Time.now.strftime('%F') }", 'w') do |fo|
fo.puts `ps -eo pid,cmd`.lines.map{ |li| li[ /^([^\[]+)/, 1] }
end
li[/^([^\[]+)/,1]
的意思是“从行首捕获所有不是“[
”的内容并返回它
它创建了一个名为“proc.2011-04-16”的文件,该文件如下所示:
PID CMD
1 /sbin/init
2
3
4
5
[...]
255 upstart-udev-bridge --daemon
296 rsyslogd -c4
303 dbus-daemon --system --fork
315 udevd --daemon
398 avahi-daemon: running
443 avahi-daemon: chroot helper
493
[...]
File.open('proc.' + Date.today.strftime, 'w') do |fo|
fo.puts `ps -eo pid,cmd`.gsub( /\s+\[.+?\]$/, '')
end