У меня есть текстовый файл, который я использовал для захвата пакетов данных по моей сети. Мне интересно, сможет ли кто-нибудь сказать мне, как я могу использовать регулярные выражения для поиска всех экземпляров 'IP len =' в файле и, возможно, извлечь их в другой файл?

1
jbod 21 Апр 2011 в 20:48

2 ответа

Лучший ответ

Этот небольшой скрипт сделает свое дело (исправляйте, как хотите):

#!/usr/bin/ruby -w

File.open('infile.txt', 'r') do |infile|
    File.open('outfile.txt', 'w') do |outfile|
        while (line = infile.gets) do
            if line =~ /IP\s+len\s+=/ then
                outfile.puts line
            end
        end
    end
end
2
odrm 21 Апр 2011 в 21:04
line.match(...) может быть более похожим на Ruby способом сделать это. =~ унаследован от Perl.
 – 
tadman
21 Апр 2011 в 21:07
Это пример пакета, который хранится в файле output.txt, который у меня есть. У меня в файле сохранено около 300 таких пакетов. Спасибо за ответ, но я не могу заставить его выводить что-либо в файл outfile.txt.
 – 
jbod
21 Апр 2011 в 21:17

Это должно помочь:

File.open("log.txt", 'r') do |f|
  File.open("ip_len_out.txt", 'w') do |out|
    f.lines.each do |line|
      out.puts $1 if line.match(/IP\s+len\s*=(\d+)/)
    end
  end
end

ip_len_out.txt теперь содержит все длины IP, разделенные новой строкой.

0
Mike Lewis 21 Апр 2011 в 21:25