Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用ruby替换文件中的字符串_Ruby_Regex_Loops_File Io - Fatal编程技术网

用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