Pattern Matching in Perl script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Pattern Matching in Perl script
# 1  
Old 04-24-2013
Pattern Matching in Perl script

I have a big perl script need to fix a small pattern matching inside ..
I have patterns like

create unique index
create index

The pattern matching should look for both the pattern in the same statement, The existing matching looks for only "create unique index"
The exising code for this i have is

Code:
/^create\s+.+\s+index\s+.+\s+on\s+(\w+)/

How do i can modify to look for "create index" also.
# 2  
Old 04-24-2013
I see two patterns, create index and create unique index

But the regular expression includes the word on

I don't understand. Neither of the patterns has the word on so how could they match?

Could you please give the complete lines you want to match against?
# 3  
Old 04-24-2013
yes it is create index /create unique index statement of oracle.
This script parse the input sql file(which has all table,index.. creation statements to setup a schema).

This script not parsing the statement "create index....." , it parse only "create unique index ...." I need to fix in this single statement itself to parse both the statements.
# 4  
Old 04-24-2013
It would be better if you could post some complete lines. But no matter.

create index has one space.
create unique index has two spaces.

Your regular expression specifies at least two spaces between create and index. Each \s+ means "one or more spaces". So that is at least two. So the RE does not match create index

Try something like /^create\s+.*index\s+.+\s+on\s+(\w+)/

You perhaps may have the same problem between index and on

Does your file have tabs? If not, just use a space instead of the confusing \s syntax.

/^create +.*index +.+ +on +(\w+)/
This User Gave Thanks to hanson44 For This Post:
# 5  
Old 04-24-2013

Code:
/^create +.*index +.+ +on +(\w+)/

The second solution worked ..
First gave error
# 6  
Old 04-24-2013
More precise is
Code:
/^create\s+(\w+\s+)?index\s+.+\s+on\s+(\w+)/

'create' space, potentially followed by word space, followed by 'index'
Instead of allowing any word \w+you can put unique.
NB a $1 in the following perl code must be changed to $2, so it still refers to the now 2nd ( ).

Last edited by MadeInGermany; 04-24-2013 at 10:30 AM..
# 7  
Old 04-24-2013
Quote:
The second solution worked ..
First gave error
Maybe you could post the input lines, the regular expression you used, and the error you saw.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl - Use of *? in Matching Pattern

I am using Perl version 5.8.4 and trying to understand the use of regular expression. Following is my code and output. $string = "Perl is a\nScripting language"; ($start) = ($string =~ /\A(.*?) /); @lines = ($string =~ /^(.*?) /gm); print "First Word (using \\A): $start\n","Line... (4 Replies)
Discussion started by: jnrohit2k
4 Replies

2. Shell Programming and Scripting

Need help with perl pattern matching

My log file looks as given below, its actually a huge file around 1 GB and these are some of the line: conn=5368758 op=10628050 msgId=64 - RESULT err=0 tag=101 nentries=1 etime=0 conn=7462122 op=-1 msgId=-1 - fd=247 slot=247 LDAPS connection from 10.13.18.12:37645 to 10.18.6.45 conn=7462122... (5 Replies)
Discussion started by: sags007_99
5 Replies

3. Shell Programming and Scripting

Pattern Matching in PERL

I have a 2 files in .gz format and it consists of 5 million lines the format of the file would be gzcat file1.gz | more abcde aerere ffgh56 .. .. 12345 gzcat file2.gz | more abcde , 12345 , 67890, ffgh56 , 45623 ,12334 whatever the string is in the file1 should be matched... (3 Replies)
Discussion started by: aravindj80
3 Replies

4. Shell Programming and Scripting

Perl Pattern matching...

I am doing a file patterhn matching for a text file in PERL I am using this,,, but it says that no file is found $filepattern = '\d{1,4}.*A0NW9693.NDM.HBIDT.*.AD34XADJ.txt'; Can anyone help me out with Perl Pattern Matching concepts and how to do pattern matching for this txt file:... (4 Replies)
Discussion started by: msrahman
4 Replies

5. Shell Programming and Scripting

Perl pattern matching!!

Hi experts, I have many occurances of the following headers in a file. I need to grep for the word changed/inserted in the header, calculate the difference between the two numbers and list the count incrementally. Headers in a file look like this: ------------------- ---------------------... (6 Replies)
Discussion started by: nmattam
6 Replies

6. Shell Programming and Scripting

Perl Pattern Matching

Hello experts, I have a file containing the following text(shortened here). File Begin ---------- < # Billboard.d3fc1302a677.imagePath=S:\\efcm_T4 < Billboard.d3fc1302a677.imagePath=S:\\efcm_T4 --- > # Billboard.d3fc1302a677.imagePath=S:\\efcm_Cassini >... (2 Replies)
Discussion started by: nmattam
2 Replies

7. Shell Programming and Scripting

Perl -Pattern Matching help..!

Hi, I got doubt in Pattern matching, could you tell me how the following differs in action ?? if ( $line1==/$line2/ ) if ( $line1=~/$line2/ ) if ( $line1=~m/$line2/) What is the significance of '~' in matching. Thanks in advance CoolBhai (5 Replies)
Discussion started by: coolbhai
5 Replies

8. Shell Programming and Scripting

Pattern matching problem in PERL script

Hi Friends, As my old friends knows, I'm old to shell script but very new to perl script, currently I'm writing a PERL script with the following functionality: I've multiple product directories, like BUSS, FIN, SALES, MKT etc., : /export/home/GLK/BUSS, /export/home/GLK/FIN, ... (11 Replies)
Discussion started by: ganapati
11 Replies

9. Shell Programming and Scripting

Perl Pattern Matching !!! Help

Hello I got the below one from in one of this forums For Ex: Loading File System Networking in nature now i need to extract the patterns between the words File and Networking : i.e. sample output: System cmd used : cat <file> | sed 's/.*File //' | sed 's/Closing.*$//' Actually... (0 Replies)
Discussion started by: maxmave
0 Replies

10. Shell Programming and Scripting

perl pattern matching

hi i am trying to get digits inside brackes from file , whose structure is defined below CREATE TABLE TELM (SOC_NO CHAR (3) NOT NULL, TXN_AMOUNT NUMBER (17,3) SIGN_ON_TIME CHAR (8) TELLER_APP_LIMIT NUMBER (17,3) FIL01 ... (2 Replies)
Discussion started by: zedex
2 Replies
Login or Register to Ask a Question