From: Thomas Cale Date: 2013-06-10T18:58:47+09:00 Subject: extract from output (regular expressions) Hi guys, As a beginner, I'm looking for a way about how to extract selected values from captured output. Suppose, I call external command in this way: def shorewall begin cmd = 'shorewall show ipa' ipa, s = Open3.capture2(cmd) if s.success? return ipa end rescue StandardError => e return "No good, #{e.message}." end end After that, shorewall contains: Shorewall 4.5.17.1 per-IP Accounting at fw1 - Sun Jun 9 18:38:05 EST 2013 Showing table: cowboys IP: 192.168.200.1 SRC packets: 4196607 bytes: 292644635 DST packets: 7224498 bytes: 762829278 IP: 192.168.200.2 SRC packets: 77289 bytes: 4799573 DST packets: 324472 bytes: 481821874 IP: 192.168.200.3 SRC packets: 122875 bytes: 14531084 DST packets: 145748 bytes: 170332152 IP: 192.168.200.4 SRC packets: 142254 bytes: 18836983 DST packets: 106100 bytes: 26420351 IP: 192.168.200.5 SRC packets: 3424090 bytes: 181079976 DST packets: 6948051 bytes: 1798270528 IP: 192.168.200.6 SRC packets: 2758 bytes: 234311 DST packets: 12875 bytes: 18882957 IP: 192.168.200.9 SRC packets: 74277 bytes: 8864576 DST packets: 21888 bytes: 5834302 IP: 192.168.200.10 SRC packets: 583 bytes: 44836 DST packets: 623 bytes: 177505 IP: 192.168.200.253 SRC packets: 157 bytes: 11899 DST packets: 156 bytes: 12834 Showing table: indians IP: 10.0.0.2 SRC packets: 1108147 bytes: 105913984 DST packets: 2698261 bytes: 3740346675 IP: 10.0.0.3 SRC packets: 362460 bytes: 145188605 DST packets: 300909 bytes: 136230642 Now, I would like to put this to the new array but under two conditions: 1. only lines starting with IP should be considered 2. only IP address and digital values should be extracted So, the final array should look like this one: 192.168.200.1 4196607 292644635 7224498 762829278 192.168.200.2 77289 4799573 324472 481821874 192.168.200.3 122875 14531084 145748 170332152 192.168.200.4 142254 18836983 106100 26420351 192.168.200.5 3424090 181079976 6948051 1798270528 192.168.200.6 2758 234311 12875 18882957 192.168.200.9 74277 8864576 21888 5834302 192.168.200.10 583 44836 623 177505 192.168.200.253 157 11899 156 12834 10.0.0.2 1108147 105913984 2698261 3740346675 10.0.0.3 362460 145188605 300909 136230642 Or, perhaps, doesn't have to be an array, I'm open for suggestions. Later, I will process each line separately and transfer all records to rrd database. Cheers, Thomas -- Posted via http://www.ruby-forum.com/.