[CentOS] text processing problem with bash/perl

Fri Feb 13 02:16:57 UTC 2009
Dennis Kaptain <dkaptain at yahoo.com.mx>


> 
> Hi,
> 
> Anyone has some ways for the following text processing problem? I have a text 
> file containing two stanzas attached below. I want to uncomment the stanza with 
> 'host=localhost' line, while left the other stanza unchanged.
> 
> ...
> 
> /* udp_send_channel {
>   host=localhost
>   port = 10017
>   ttl = 1
> } */
> 
> /* udp_send_channel {
>   host=ganglia100.ec2.example.com
>   port = 10017
>   ttl = 1
> } */
> 
> ...
> 
> If I use command below then both stanza will be altered... Please help.
> 
> sed  -i -e '/^\/\* udp_send_channel/, /} \*\// {s/^\/\* 
> udp_send_channel/udp_send_channel/g; s/\} \*\//}/g; }'
> 
> --David
> 

this is probably WAY more than you wanted but it does work, save your 2 stanzas as 'file' and run this program:

#! /usr/bin/perl -w
use strict;

open FILE,"file" or die;

my $stanzaFlag = 0;
my @buffer = ();
my ($x, $i);

while (<FILE>) {
   $i = $_;
   # see if this line has /* if yes, start saving the stanza in buffer
   if (index ($i,'/*') >= 0) {
      $stanzaFlag = 1;
   }
   # put it into the buffer
   if ($stanzaFlag == 1) {
      $buffer[$x++] .= $i;
   }
   # see if we are done with this stanza
   if (index ($i,'*/') >= 0) {
      $stanzaFlag = 0;
      # get rid of the comments.
      if (index($buffer[1],'localhost') >= 0) {
         $buffer[0] =~ s/\/\*//;
         $buffer[4] =~ s/\*\///;
      }
      print "@buffer\n";
      @buffer = ();
      $x = 0;
   }
}

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! 
Regístrate ya - http://correo.yahoo.com.mx/