Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > grouping and split

Reply
Thread Tools

grouping and split

 
 
barjunk
Guest
Posts: n/a
 
      07-04-2007
I'm trying to do validation on a firewall rule. The rule looks like
this:

-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
ACCEPT


I know I can use split(' ') to break up the above entry into small
parts, but what I really want is every other one.

So '-A eth0' should be one then '-i eth0' should be the next....etc.

I guess I could use split then step through the resultant array and
make another, but I thought there might be a better ruby style answer.

Thanks for any guidance.

Mike B.

 
Reply With Quote
 
 
 
 
Phrogz
Guest
Posts: n/a
 
      07-04-2007
On Jul 3, 6:54 pm, barjunk <(E-Mail Removed)> wrote:
> I'm trying to do validation on a firewall rule. The rule looks like
> this:
>
> -A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> ACCEPT
>
> I know I can use split(' ') to break up the above entry into small
> parts, but what I really want is every other one.
>
> So '-A eth0' should be one then '-i eth0' should be the next....etc.


irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
tcp --dport 22 -j ACCEPT"
=> "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
ACCEPT"

irb(main):002:0> s.scan /[^ ]+ [^ ]+/
=> ["-A eth0-IN", "-i eth0", "-s 192.168.0.0/24", "-p tcp", "-m tcp",
"--dport 22", "-j ACCEPT"]

 
Reply With Quote
 
 
 
 
barjunk
Guest
Posts: n/a
 
      07-05-2007
On Jul 3, 6:03 pm, Phrogz <(E-Mail Removed)> wrote:
> On Jul 3, 6:54 pm, barjunk <(E-Mail Removed)> wrote:
>
> > I'm trying to do validation on a firewall rule. The rule looks like
> > this:

>
> > -A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > ACCEPT

>
> > I know I can use split(' ') to break up the above entry into small
> > parts, but what I really want is every other one.

>
> > So '-A eth0' should be one then '-i eth0' should be the next....etc.

>
> irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
> tcp --dport 22 -j ACCEPT"
> => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> ACCEPT"
>
> irb(main):002:0> s.scan /[^ ]+ [^ ]+/
> => ["-A eth0-IN", "-i eth0", "-s 192.168.0.0/24", "-p tcp", "-m tcp",
> "--dport 22", "-j ACCEPT"]


Thanks tons for that...maybe it would be good practice to keep re-
reading the chapter on the String class and a few other key ones, like
maybe Enumerable?

Any others folks would recommend?

Mike B.

 
Reply With Quote
 
barjunk
Guest
Posts: n/a
 
      07-05-2007
On Jul 3, 6:03 pm, Phrogz <(E-Mail Removed)> wrote:
> On Jul 3, 6:54 pm, barjunk <(E-Mail Removed)> wrote:
>
> > I'm trying to do validation on a firewall rule. The rule looks like
> > this:

>
> > -A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > ACCEPT

>
> > I know I can use split(' ') to break up the above entry into small
> > parts, but what I really want is every other one.

>
> > So '-A eth0' should be one then '-i eth0' should be the next....etc.

>
> irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
> tcp --dport 22 -j ACCEPT"
> => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> ACCEPT"
>
> irb(main):002:0> s.scan /[^ ]+ [^ ]+/
> => ["-A eth0-IN", "-i eth0", "-s 192.168.0.0/24", "-p tcp", "-m tcp",
> "--dport 22", "-j ACCEPT"]



I had to modify this just a bit to work with allowable multispace
situations. An example is a rule that might look like this:

-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport
22 -j ACCEPT

it looks like this: s.scan /[^ ]+ +[^ ]+/

I suppose another solution would be to trim all the extra spaces first
with some sort of gsub, then use the scan.

Thanks again.

Mike B.

 
Reply With Quote
 
Sam Smoot
Guest
Posts: n/a
 
      07-06-2007
On Jul 5, 1:39 pm, barjunk <(E-Mail Removed)> wrote:
> On Jul 3, 6:03 pm, Phrogz <(E-Mail Removed)> wrote:
>
>
>
> > On Jul 3, 6:54 pm, barjunk <(E-Mail Removed)> wrote:

>
> > > I'm trying to do validation on a firewall rule. The rule looks like
> > > this:

>
> > > -A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > > ACCEPT

>
> > > I know I can use split(' ') to break up the above entry into small
> > > parts, but what I really want is every other one.

>
> > > So '-A eth0' should be one then '-i eth0' should be the next....etc.

>
> > irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
> > tcp --dport 22 -j ACCEPT"
> > => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > ACCEPT"

>
> > irb(main):002:0> s.scan /[^ ]+ [^ ]+/
> > => ["-A eth0-IN", "-i eth0", "-s 192.168.0.0/24", "-p tcp", "-m tcp",
> > "--dport 22", "-j ACCEPT"]

>
> I had to modify this just a bit to work with allowable multispace
> situations. An example is a rule that might look like this:
>
> -A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport
> 22 -j ACCEPT
>
> it looks like this: s.scan /[^ ]+ +[^ ]+/
>
> I suppose another solution would be to trim all the extra spaces first
> with some sort of gsub, then use the scan.
>
> Thanks again.
>
> Mike B.


Another nice way to do it would be to split it up into a Hash since
that would give you distinct option/value pairs.

# s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -
j ACCEPT"
# => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
ACCEPT"
# Hash[s.split]
# => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0",
"-j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}

 
Reply With Quote
 
Chris Shea
Guest
Posts: n/a
 
      07-06-2007
On Jul 5, 8:59 pm, Sam Smoot <(E-Mail Removed)> wrote:
>
> Another nice way to do it would be to split it up into a Hash since
> that would give you distinct option/value pairs.
>
> # s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -
> j ACCEPT"
> # => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> ACCEPT"
> # Hash[s.split]
> # => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0",
> "-j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}


Don't you need to splat the split?

mvb:~ cms$ ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.9.1]
mvb:~ cms$ irb
irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
tcp --dport 22 -j ACCEPT"
=> "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
ACCEPT"
irb(main):002:0> Hash[s.split]
ArgumentError: odd number of arguments for Hash
from (irb):2:in `[]'
from (irb):2
from :0
irb(main):003:0> Hash[*s.split]
=> {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0", "-
j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}

 
Reply With Quote
 
Sam Smoot
Guest
Posts: n/a
 
      07-06-2007
On Jul 5, 10:28 pm, Chris Shea <(E-Mail Removed)> wrote:
> On Jul 5, 8:59 pm, SamSmoot<(E-Mail Removed)> wrote:
>
>
>
> > Another nice way to do it would be to split it up into a Hash since
> > that would give you distinct option/value pairs.

>
> > # s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -
> > j ACCEPT"
> > # => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > ACCEPT"
> > # Hash[s.split]
> > # => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0",
> > "-j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}

>
> Don't you need to splat the split?
>
> mvb:~ cms$ ruby -v
> ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.9.1]
> mvb:~ cms$ irb
> irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
> tcp --dport 22 -j ACCEPT"
> => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> ACCEPT"
> irb(main):002:0> Hash[s.split]
> ArgumentError: odd number of arguments for Hash
> from (irb):2:in `[]'
> from (irb):2
> from :0
> irb(main):003:0> Hash[*s.split]
> => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0", "-
> j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}


Yeah, I'm sorry. Got sloppy with my copy & paste and figured I could
just write it faster I guess.

 
Reply With Quote
 
barjunk
Guest
Posts: n/a
 
      07-11-2007
On Jul 5, 7:42 pm, Sam Smoot <(E-Mail Removed)> wrote:
> On Jul 5, 10:28 pm, Chris Shea <(E-Mail Removed)> wrote:
>
>
>
> > On Jul 5, 8:59 pm, SamSmoot<(E-Mail Removed)> wrote:

>
> > > Another nice way to do it would be to split it up into a Hash since
> > > that would give you distinct option/value pairs.

>
> > > # s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -
> > > j ACCEPT"
> > > # => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > > ACCEPT"
> > > # Hash[s.split]
> > > # => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0",
> > > "-j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}

>
> > Don't you need to splat the split?

>
> > mvb:~ cms$ ruby -v
> > ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.9.1]
> > mvb:~ cms$ irb
> > irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
> > tcp --dport 22 -j ACCEPT"
> > => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > ACCEPT"
> > irb(main):002:0> Hash[s.split]
> > ArgumentError: odd number of arguments for Hash
> > from (irb):2:in `[]'
> > from (irb):2
> > from :0
> > irb(main):003:0> Hash[*s.split]
> > => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0", "-
> > j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}

>
> Yeah, I'm sorry. Got sloppy with my copy & paste and figured I could
> just write it faster I guess.



Although this doesn't account for a typo like leaving off some part of
the pairs...could rescue for that situation.

Thanks for all the feeback.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to split a grouping into 3 parts Hvid Hat XML 6 03-07-2008 02:00 PM
How can I split database results with ExecuteReader and Split? needin4mation@gmail.com ASP .Net 2 05-05-2006 10:36 PM
split on '' (and another for split -1) trans. (T. Onoma) Ruby 10 12-28-2004 06:36 AM
Small inconsistency between string.split and "".split Carlos Ribeiro Python 11 09-17-2004 05:57 PM
Choosing grouping of split items fishfry Perl Misc 8 02-16-2004 11:32 AM



Advertisments