Sponsored Content
Top Forums Shell Programming and Scripting Perl: Conditional replace based on previous and current value in a line Post 302602527 by birei on Monday 27th of February 2012 03:50:20 PM
Old 02-27-2012
Hi naveen@,

I don't understand your perl script. It outputs nothing with that input file, and I think you didin't match the exact withespace.

Try next one:
Code:
$ cat infile
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0; /* if next shift_port is P0 I need to replace this with M0; and next shift_port's P0; with 00;
    port3       = 0;
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;
    port3       = 0;
    reset       = 1;
   }
  Macro "Inputs" { 
    test_ip =
        110111010110
  }

  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00;
    port3       = 0;
    reset       = 1;
  }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00; 
    port3       = 0;
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;/* if next shift_port is P0; I need to replace this with M0; and next shift_port's P0 with 00;
    port3       = 0;
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;/* if next shift_port is P0; I need to replace this with M0; and next shift_port's P0 with 00;
    port3       = 0;
    reset       = 1;
   }
}
$ cat script.pl
use warnings;
use strict;

die qq[Usage: perl $0 <input-file>\n] unless @ARGV == 1;

my @range_lines = ();

while ( <> ) {
        chomp;
        if ( m/\A\s*(?i:shift_port)\s*=/ ... m/\A\s*(?i:shift_port)\s*=/ ) {
                push @range_lines, $_;
                next;
        }

        if ( @range_lines ) {
                if ( $range_lines[0] =~ m/=\s*P0\s*;/ &&
                         $range_lines[ $#range_lines ] =~ m//
                ) {
                        $range_lines[0] =~ s/P0/M0/;
                        $range_lines[ $#range_lines ] =~ s/P0/00/;
                }

                printf qq[%s\n], join qq[\n], splice @range_lines;
        }

        printf qq[%s\n], $_;
}
$ perl script.pl infile
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = M0; /* if next shift_port is P0 I need to replace this with M0; and next shift_port's P0; with 00;
    port3       = 0;
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00;
    port3       = 0;
    reset       = 1;
   }
  Macro "Inputs" { 
    test_ip =
        110111010110
  }

  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00;
    port3       = 0;
    reset       = 1;
  }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00; 
    port3       = 0;
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = M0;/* if next shift_port is P0; I need to replace this with M0; and next shift_port's P0 with 00;
    port3       = 0;
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00;/* if next shift_port is P0; I need to replace this with M0; and next shift_port's P0 with 00;
    port3       = 0;
    reset       = 1;
   }
}

Regards,
Birei
This User Gave Thanks to birei For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

replace [previous] line

Hi ,suppose I have a file title=dsafsadf ........ ....... year=1995 author=john smith ............ title=bbbbbb ........ ....... year=1988 author=alex I need to replace the title line with a expression that contains variables year and author. I want to use a python readline for loop.... (10 Replies)
Discussion started by: grossgermany
10 Replies

2. Shell Programming and Scripting

sed conditional string replace for each line

Hi all, I appreciate the enormous amount of knowledge that flows in this forum. I am an average UNIX user. I have many files with lines like the below. I have separated each line with space for ease of reading. I need to replace the first occurance of "/00" with null on those lines that have... (6 Replies)
Discussion started by: Nanu_Manju
6 Replies

3. Shell Programming and Scripting

Print previous, current and next line using sed

Hi, how can i print the previous, current and next line using sed? current line is the matching line. The following prints all lines containing 'Failure' and also the immediate next line cat $file | sed -n -e '/Failure/{N;p;}' Now, i also want to print the previous line too. Thanks,... (8 Replies)
Discussion started by: ysrinu
8 Replies

4. Shell Programming and Scripting

How to use sed to search for string and Print previous two lines and current line

Hello, Can anybody help me to correct my sed syntax to find the string and print previous two lines and current line and next one line. i am using string as "testing" netstat -v | sed -n -e '/test/{x;2!p;g;$!N;p;D;}' -e h i am able to get the previous line current line next line but... (1 Reply)
Discussion started by: nmadhuhb
1 Replies

5. Shell Programming and Scripting

Printing previous line based on pattern using sed

Hi, I have a written a shell script to get the previous line based on the pattern. For example if a file has below lines: ---------------------------------------------- #UNBLOCK_As _per #As per 205.162.42.92 #BLOCK_As_per #----------------------- #input checks abc.com... (5 Replies)
Discussion started by: Anjan1
5 Replies

6. UNIX for Dummies Questions & Answers

Awk to print data from current and previous line

Hi guys, I have found your forum super useful. However, right now I am stuck on a seemingly "simple" thing in AWK. I have two columns of data, the first column in Age (in million years) and the second column is Convergence Rate (in mm/yr). I am trying to process my data so I can use it to... (2 Replies)
Discussion started by: awk_noob_456
2 Replies

7. Shell Programming and Scripting

Sed Comparing Parenthesized Values In Previous Line To Current Line

I am trying to delete lines in archived Apache httpd logs Each line has the pattern: <ip-address> - - <date-time> <document-request-URL> <http-response> <size-of-req'd-doc> <referring-document-URL> This pattern is shown in the example of 6 lines from the log in the code box below. These 6... (1 Reply)
Discussion started by: Proteomist
1 Replies

8. Shell Programming and Scripting

Perl to send previous and current value

For example, I have a file called number.txt. x y 1 1 2 4 3 9 4 6 5 5 6 6 7 9 8 4 9 1 10 0 ... And I want to print out the value of x and y, if y%4==0 and the next value of y%4==0. Thus, the sample output is: 1 1 *because the previous x before 2 is 1 2 4 *because 4%4 == 0 7 9... (2 Replies)
Discussion started by: Tzeronone
2 Replies

9. Shell Programming and Scripting

Replace first field of a line with previous filed of the line

Hi Everyone, I have a file as below: IM2345638,sherfvf,usha,30 IM384940374,deiufbd,usha,30 IM323763822,cdejdkdnbds,theju,15 0,dhejdncbfd,us,20 IM398202038,dhekjdkdld,tj,30 0,foifsjd,u2,40 The output i need is as below IM2345638,sherfvf,usha,30... (4 Replies)
Discussion started by: usha rao
4 Replies

10. Shell Programming and Scripting

sed conditional \n replace for each line

How could be removed \n only if appearing at position 80 in the line? (4 Replies)
Discussion started by: RomanF
4 Replies
CUTTER(8)						      System Manager's Manual							 CUTTER(8)

NAME
cutter - cut tcp/ip connections SYNOPSIS
cutter ipaddress1 [ port1 [ ipaddress2 [ port2 ] ] ] DESCRIPTION
Cutter is an open source program that allows Linux firewall administrators to abort TCP/IP connections routed over the firewall or router on which it is run. WARNING
Cutter has been designed for use as a administrators tool for Linux firewalls. It's use (as is, or modified) for any other purpose is not sanctioned by the author. So - do not use this tool as a parachute, or to dry your cat, chill meat, answer your phone, drive you car, teach your kids to read or attack other people's computer systems or networks. This software has been designed for legal and appropriate use by network security administrators and the like. It has been written as part of a larger Linux firewall project, targetting at controlling traffic from peer-to-peer software such as Kazaa, iMesh and others into and out of a private network. It is not designed as a tool for malicious use and the author in no way sanctions such use. Users of the software should be aware that it's actions are easily detectable using a number of readily available network monitoring tools, and it makes no attempt to disguise it's actions. Malicious use of "cutter" could result in a jail sentance in a number of countries around the world. The author is not responsible for the results of using this software. It is provided "as is" in the hope that it will be useful, but no garantees are made about it's use. USAGE
Cutter can be called using one of the following four syntaxes. cutter ip-address Example: cutter 10.10.0.45 Cuts all connections passing through the firewall between any ports on the specified ip-address (either a "private" or "public" address) and any other hosts. This can be used to close down all incoming connections to a particular server, all outgoing connec- tions from a particular client or all outgoing connections to a server. cutter ip-address port Example: cutter 200.1.2.3 80 Cuts all connections to or from the specified ip-address/port pair. This allows the user to be a little more specific than the pre- vious example and allows targetting of specific services on specific hosts. cutter ip-address-1 port-1 ip-address-2 Example: cutter 200.1.2.3 22 10.10.0.45 Cuts all connections between ip-address-2 and ip-address-1/port-1. This allows the user to cut connections between a specified "client" and a particular service on a specified host. Our example closes host 10.10.0.45's SSH connection to server 200.1.2.3. cutter ip-address-1 port-1 ip-address-2 port-2 Example: cutter 200.1.2.3 22 10.10.0.45 32451 Cuts the specific connection between the two ip/port number pairs given. STATUS
Cutter 1.03 should be considered EXPERIMENTAL. The author is releasing a tool that works on the systems he has access to (namely: IPCop and RedHat Linux), and he is seeking input on it's use on other systems, ideas for improvement, offers of sponsorship - etc. ADDITIONAL DOCUMENTATION
This program is documented at http://www.lowth.com/cutter/ <http://www.lowth.com/cutter/> AUTHOR
Blars Blarson addapted the README and web page written by Chris Lowth into this man page for debian package of cutter. This man page may be distribuated under the terms of the Gnu GPL version 2. April, 2005 CUTTER(8)
All times are GMT -4. The time now is 02:55 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy