perl parse across multiple line in txt file

B

bcdixit

i have a file with the following sample text

1 create table xyz
2 no before journal,
3 no after journal
4 (
5 col1 integer,
6 col2 integer,
7 ...
8 coln varchar(10)
9 )
10;
i want to use perl regex to search and replace text from the line that
starts with 'create' word till the first opening bracket i.e the '('
with blanks or rather delete the lines altogether.
the output should look something like this.


1 col1 integer,
2 col2 integer,
3 ...
4 coln varchar(10)
5 )
6;

the input file could also have the following scenarios..
1 create table xyz no before journal,
2 no after journal
3 (
4 col1 integer,
5 col2 integer,
6 ...
7 coln varchar(10)
8 )
9;

OR


1 create table xyz no before journal,
2 no after journal (
3 col1 integer,
4 col2 integer,
5 ...
6 coln varchar(10)
7 )
8;

OR

1 create table xyz
2 (
3 col1 integer,
4 col2 integer,
5 ...
6 coln varchar(10)
7 )
8;

the only certainty is that line starts with the 'create' word. THERE
COULD BE ANY WORDS BETWEEN THE 'CREATE' AND THE '(' .
so in short, i want the search to look for any line that begins with
the 'create' word and then continue the search till the first '(' and
replace the match with deleted lines.

I know how to use perl regex to search for one line at a time but not
if the condition could be across multiple lines.

any help will be greatly appreciated.

thanks
 
T

Tad McClellan

bcdixit said:
i have a file with the following sample text

1 create table xyz
2 no before journal,
3 no after journal
4 (
5 col1 integer,
6 col2 integer,
7 ...
8 coln varchar(10)
9 )
10;
i want to use perl regex to search and replace text from the line that
starts with 'create' word till the first opening bracket i.e the '('
with blanks or rather delete the lines altogether.
the output should look something like this.


1 col1 integer,
2 col2 integer,
3 ...
4 coln varchar(10)
5 )
6;


perldoc -q between

How can I pull out lines between two patterns that are themselves on difâ€
ferent lines?


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

my $cnt=1;
while ( <DATA> ) {
next if /^\d+ create/ .. /^\d+ \(/;
s/^\d+/$cnt/;
$cnt++;
print;
}

__DATA__
1 create table xyz
2 no before journal,
3 no after journal
4 (
5 col1 integer,
6 col2 integer,
7 ...
8 coln varchar(10)
9 )
10;
 
T

Tad McClellan

bcdixit said:
i have a file with the following sample text

1 create table xyz
2 no before journal,
3 no after journal
4 (
5 col1 integer,
6 col2 integer,
7 ...
8 coln varchar(10)
9 )
10;
i want to use perl regex to search and replace text from the line that
starts with 'create'


There is no line there that starts with 'create'.

There is a line that starts with '1', and with '2', and ...
 
B

bcdixit

sorry if I was not too clear. Those numbers are actually line numbers.
those numbers are not actually part of the text.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,576
Members
45,054
Latest member
LucyCarper

Latest Threads

Top