Making case insensitive perl statement


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Making case insensitive perl statement
# 1  
Old 01-06-2012
Making case insensitive perl statement

Code:
 
cat > tble
blah blah 
blah sdfsdf dsdf sdf .d.f ..df .. sdf..
create table NextID (
        id int auto_increment,
        zoneID int,
        entityName varchar(64),
        nextID int,
        lastModified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        primary key(id)
) engine=Innodb;
sdfsdf.
.
.
 
CREATE TABLE  ReplicatorInfo  (
   id  INT(11) NOT NULL AUTO_INCREMENT,
   lastMessageReceivedTime   TIMESTAMP DEFAULT 0,
   lastModified  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY ( id )
)ENGINE=INNODB;
blah blha etc etc
.
.
.
[root@dunkin-ds-dev-103 vivek]#  perl -e 'print reverse <>' "tble"|perl -lne '(/\s+engine=Innodb/i .. /create\s+table/i) && print;'|perl -e 'print reverse <>' > onlytables.sql
[root@vivek]#
[root@vivek]#
[root@vivek]# cat onlytables.sql
create table NextID (
        id int auto_increment,
        zoneID int,
        entityName varchar(64),
        nextID int,
        lastModified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        primary key(id)
) engine=Innodb;
[root@vivek]#

consider the above scenario, the expected output after executing the above perl statement
should be
Code:
cat onlytables.sql
create table NextID (
        id int auto_increment,
        zoneID int,
        entityName varchar(64),
        nextID int,
        lastModified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        primary key(id)
) engine=Innodb;
CREATE TABLE  ReplicatorInfo  (
   id  INT(11) NOT NULL AUTO_INCREMENT,
   lastMessageReceivedTime   TIMESTAMP DEFAULT 0,
   lastModified  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY ( id )
)ENGINE=INNODB;

(i dont need new awk statements)i just want to modify the perl statement used above cause the print reverse function is required for other scenarions.. i just want to make it case insensitive for "create table" and "engine=innodb" which apparently is not working as i desplayed the output at the start..
Code:
perl -e 'print reverse <>' "tble"|perl -lne '(/\s+engine=Innodb/i .. /create\s+table/i) && print;'|perl -e 'print reverse <>' > onlytables.sql

# 2  
Old 01-06-2012
Are your "create table" block separated by an empty line ?

Code:
CREATE TABLE ..
bla bla
...
...(END OF CREATE TABLE);

What i mean is : can we consider the empty line as a record separator into the file (and thus, extract Records that start with "CREATE TABLE" ?
# 3  
Old 01-06-2012
no no it should start with "create table" and end with "engine=Innodb"... this
constitute a complete table... run the perl script it perfroms the above perfectly... i
only need to modify it to perfrom the same function even if it is "CREATE TABLE"
"ENGINE=InnoDB" or "create table" "enigne=innodb" or any permutations..
# 4  
Old 01-06-2012
Code:
awk 'tolower($0)~/^create table/,tolower($0)~/engine=innodb;/' yourfile

Code:
$ awk 'tolower($0)~/^create table/,tolower($0)~/engine=innodb;/' tst
create table NextID (
        id int auto_increment,
        zoneID int,
        entityName varchar(64),
        nextID int,
        lastModified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        primary key(id)
) engine=Innodb;
CREATE TABLE  ReplicatorInfo  (
   id  INT(11) NOT NULL AUTO_INCREMENT,
   lastMessageReceivedTime   TIMESTAMP DEFAULT 0,
   lastModified  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY ( id )
)ENGINE=INNODB;

# 5  
Old 01-06-2012
thanks the above works but i need the code to be in perl because in the code i am using print reverse.. which is required for some important functionality...
Code:
perl -e 'print reverse <>'

is there anyway you could modify same perl code to work case insesitively plz.. :-/

check below page for the situation it might arrise if i dont use print reverse
Code:
https://www.unix.com/shell-programming-scripting/173670-extracting-block-lines-file.html


Last edited by vivek d r; 01-06-2012 at 07:18 AM..
# 6  
Old 01-07-2012
Regexp issue:
Code:
perl -e 'print reverse <>' "tble"|perl -lne '(/engine=Innodb/i .. /create\s+table/i) && print;'|perl -e 'print reverse <>' > onlytables.sql

This User Gave Thanks to Klashxx For This Post:
# 7  
Old 01-09-2012
thanks klash your code worked... :-)
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Making SED case insensitive

Dears, In the below string, please let me know how to make the sed search case-incensitive. I have more such lines in my script instead of let me know any other easier option. sed -n '/dn: MSISDN=/,/^\s*$/p' full.ldif > temp ; sed -n... (4 Replies)
Discussion started by: Kamesh G
4 Replies

2. Shell Programming and Scripting

How to use scp for case insensitive copy?

Hi, I have a requirement to copy files from one server to other using SCP. I am using * to copy files as I just need to pick up the files that are ending with .OK. But few ok files are in upper case and few are in lower case. If I am using below code, only files with upper case OK are being... (1 Reply)
Discussion started by: Nikhath
1 Replies

3. Shell Programming and Scripting

making sed command case insensitive

i have something like this in a file cat onlytables.sql create table NextID ( id int auto_increment, zoneID int, entityName varchar(64), nextID int, lastModified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, primary... (6 Replies)
Discussion started by: vivek d r
6 Replies

4. Shell Programming and Scripting

Making case insensitive in awk

here is a statement awk '/CREATE PROCEDURE/,/elimiter/' "$file1" > onlyproc1.sql which mean cut from create procedure to Delimiter or delimiter and paste it in onlyproc1.sql... my query is how to make this case insensitive.. that is i want the above code to work whther it is Delimiter or... (26 Replies)
Discussion started by: vivek d r
26 Replies

5. Shell Programming and Scripting

Making expr match case insensitive...

here is the condition i am using ] how to make this case insesntive... that is it should work with smaller case of "index" too... (11 Replies)
Discussion started by: vivek d r
11 Replies

6. Shell Programming and Scripting

Case Insensitive search

Hey , i am trying to do a search for the certain books , and im trying to make it case insensitive. what i have come up with so far is this : Database.txt RETARDED MONKEY:RACHEAL ABRAHAML:30:30:20 GOLD:FATIN:23.20:12:3 STUPID:JERLYN:20:40:3 echo -n "Title: " read Title echo -n... (3 Replies)
Discussion started by: gregarion
3 Replies

7. Shell Programming and Scripting

case-insensitive if on substring

I'd like to print a line if a substring is matched in a case insensitive manner something like do a case insensitive search for ABCD as a substring: awk '{ if (substr($1,1,4) == "") print $1 }' infile > outfile I'm not certain how to make the syntax work??? Thanks (4 Replies)
Discussion started by: dcfargo
4 Replies

8. Shell Programming and Scripting

case insensitive

hi everyone, I need to do the following thing in a case insesitive mode sed 's/work/job/g' filename since work could appear in different form as Work WORK WorK wORK,.... I was wondering if i could do a case insensitive search of a word. thanks in advance, :) (4 Replies)
Discussion started by: ROOZ
4 Replies

9. Shell Programming and Scripting

awk case-insensitive

can I tell awk to be case insensitive for one operation without setting the ignorecase value ? thanks, Steffen (7 Replies)
Discussion started by: forever_49ers
7 Replies

10. UNIX for Dummies Questions & Answers

case insensitive locate

How can I do a case insensitive locate? (3 Replies)
Discussion started by: davis.ml
3 Replies
Login or Register to Ask a Question