Match pattern and replace with string


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Match pattern and replace with string
# 1  
Old 09-03-2009
Bug Match pattern and replace with string

hi guys,

insert into /*<new>*/abc_db.tbl_name

this is should be replaced to

insert into /*<new>*/${new}.tbl_name

it should use '.' as delimiter and replace

is there any way to do it using sed
# 2  
Old 09-03-2009
Code:
sed 's/\(.*\/\)[^.]*\(\.tbl_name\)/\1${new}\2/' <<<"insert into /*<new>*/abc_db.tbl_name"
insert into /*<new>*/${new}.tbl_name

is that it?
# 3  
Old 09-03-2009
tbl_name is nat same always

Can we do it like matching with /*<new>*/ then find until '.' and replace it with ${new} by not using abc_db
# 4  
Old 09-03-2009
Code:
sed 's/\(.*\/\*<new>\*\/\)[^.]*\(\..*\)/\1${new}\2/' <<<"insert into /*<new>*/abc_db.tbl_name"
insert into /*<new>*/${new}.tbl_name

# 5  
Old 09-04-2009
Thanks daPeach, It's working,
can you please explain wat it is doing?

---------- Post updated 09-04-09 at 01:53 PM ---------- Previous update was 09-03-09 at 10:05 PM ----------

how can we do this?

Input:
Code:
         	  
	  SELECT *
	  FROM
	    /*<new>*/abc_db./*<abc>*//*<hef>*/tbl_name
	  
	  WHERE
	        (   new_dt >= cast(/*<from_date>*/'2007-08-01' as date)
	        AND old_dt < cast(/*<to_date>*/'2007-08-02' as date)
	 	        )
	  ;

Output:

Code:
SELECT *
	  FROM
	    /*<new>*/${new}./*<abc>*//*<hef>*/${abc}${hef}_tbl_name
	  
	  WHERE
	        (   new_dt >= cast(/*<from_date>*/'${from_dt}' as date)
	        AND old_dt < cast(/*<to_date>*/'{to_date}' as date)
	 	        )
	  ;

How can we achevie this using sed, note that abc_db and tbl_name and dates change

Last edited by sol_nov; 09-04-2009 at 02:54 PM..
# 6  
Old 09-04-2009
Code:
cat sol_nov.infile
  SELECT *
  FROM
    /*<new>*/abc_db./*<abc>*//*<hef>*/tbl_name
  
  WHERE
        (   new_dt >= cast(/*<from_date>*/'2007-08-01' as date)
        AND old_dt < cast(/*<to_date>*/'2007-08-02' as date)
         )
  ;
sed "s@\(/\*<new>\*/\)[^.]*\(\./\*<[^>]*>\*//\*<[^>]*>\*/\)@\1${new}\2\${abc}\${hef}_@
s@\(.*/\*<from_date>\*/'\)[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\([^)]*\)@\1\${from_dt}\2@
s@\(.*/\*<to_date>\*/'\)[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\([^)]*\)@\1\${to_date}\2@" sol_nov-20090904.infile
  SELECT *
  FROM
    /*<new>*/./*<abc>*//*<hef>*/${abc}${hef}_tbl_name
  
  WHERE
        (   new_dt >= cast(/*<from_date>*/'${from_dt}' as date)
        AND old_dt < cast(/*<to_date>*/'${to_date}' as date)
         )
  ;

You really should take time to read some docs about sed.
It'll take longer for me to explain (and I'll be less clear), than for you to check the 'sed, a stream editor' page about these 'simple' regexps.
# 7  
Old 09-04-2009
Or you can use the language with the mother lode of regexes:

Code:
$
$ cat f2
SELECT *
          FROM
            /*<new>*/abc_db./*<abc>*//*<hef>*/tbl_name
          WHERE
                (   new_dt >= cast(/*<from_date>*/'2007-08-01' as date)
                AND old_dt < cast(/*<to_date>*/'2007-08-02' as date)
                        )
          ;
$
$
$ ##
$ perl -nle 's!(\*/).*?(\.)!$1\${new}$2!;
>            s/(tbl_name)/\${abc}\${hef}_$1/;
>            /new_dt/ && s!\d{4}-\d\d-\d\d!\${from_dt}!;
>            /old_dt/ && s!\d{4}-\d\d-\d\d!\${to_date}!;
>            print' f2
SELECT *
          FROM
            /*<new>*/${new}./*<abc>*//*<hef>*/${abc}${hef}_tbl_name
          WHERE
                (   new_dt >= cast(/*<from_date>*/'${from_dt}' as date)
                AND old_dt < cast(/*<to_date>*/'${to_date}' as date)
                        )
          ;
$
$

tyler_durden
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

If pattern match, replace it with #

This command is not working for me. awk '{if ($1 == server) {$1 = #server} }' /etc/ntp.conf # grep server /etc/ntp.conf # Use public servers from the pool.ntp.org project. server 0.rhel.pool.ntp.org iburst server 1.rhel.pool.ntp.org iburst server 2.rhel.pool.ntp.org iburst server... (5 Replies)
Discussion started by: kenshinhimura
5 Replies

2. Shell Programming and Scripting

Rearrange or replace only the second line after pattern match or pattern match

Im using the command below , but thats not the output that i want. it only prints the odd and even numbers. awk '{if(NR%2){print $0 > "1"}else{print $0 > "2"}}' Im hoping for something like this file1: Text hi this is just a test text1 text2 text3 text4 text5 text6 Text hi... (2 Replies)
Discussion started by: invinzin21
2 Replies

3. Shell Programming and Scripting

How to replace with pattern match using Perl

I have to replace a line, if it has a pattern for example Suppose file.out contains: <tr><td class="cB">Hello</td><td class="cB">1245</td><td class="cB">958</td><td class="cRB">1.34</td><td class="cRB">1.36</td></tr> <tr><td class="cB">world</td><td class="cB">3256</td><td... (8 Replies)
Discussion started by: sol_nov
8 Replies

4. Shell Programming and Scripting

sed or awk command to replace a string pattern with another string based on position of this string

here is what i want to achieve... consider a file contains below contents. the file size is large about 60mb cat dump.sql INSERT INTO `table1` (`id`, `action`, `date`, `descrip`, `lastModified`) VALUES (1,'Change','2011-05-05 00:00:00','Account Updated','2012-02-10... (10 Replies)
Discussion started by: vivek d r
10 Replies

5. Shell Programming and Scripting

Help with Pattern match and replace

I have a file containing a multiple lines of the format sddfdsf_gaf/ywrtrtwrt_gaf ghfghfgh_ert/xcvxcvcv_ert werwerwwerw_adf/jkhjkhjkjhkjhk_adf I am interested in only the first 3 letters following the "_" character and make those 3 letters uppercase after extraction. So would like to convert... (5 Replies)
Discussion started by: inditopgun
5 Replies

6. Shell Programming and Scripting

Match a Pattern & Replace The value Using AWK

I have a csv file in which i have to search a particular string and replace the data in any column with something else. How do i do it using awk. file ------ 2001,John,USA,MN,20101001,29091.50,M,Active,Y 2002,Mike,USA,NY,20090130,342.00,M,Pending,N... (3 Replies)
Discussion started by: Sheel
3 Replies

7. Shell Programming and Scripting

pattern match and replace another pattern in same line

I have a pattern username:x:32005:32006::/usr/local/user:/bin/bash I need to match the line containing username and replace /bin/bash with /usr/local/my/bin/noshell So it becomes username:x:32005:32006::/usr/local/user:/usr/local/my/bin/noshell (7 Replies)
Discussion started by: anilcliff
7 Replies

8. Shell Programming and Scripting

replace pattern after the first pattern match

I need this. aaa OOOOO bbb ccc OOOOO ddd fff ggg OOOOO iii OOOOO I need all OOOOO replaced with PPPPP, but only change after the pattern ggg. So the first two OOOOO should not be changed. OUTPUT should be :- aaa (2 Replies)
Discussion started by: anilcliff
2 Replies

9. Shell Programming and Scripting

Match pattern and replace

Hi All, I am new to unix shell scripting, I need your help guys in coming up with some thing for the following scenario: file1 ABC_BASE ${base} ABC_ACC ${acc} ABC_TEST ${test} 01-01-2006 ${from_dt} 01-15-2006 ${to_dt} file 2 I have an file2.sql file which contains: ####This... (4 Replies)
Discussion started by: sol_nov
4 Replies

10. Shell Programming and Scripting

Replace 1 word after pattern match

Hi, Here is my pattern CREATE USER LZ IDENTIFIED BY VALUES 'A0144280ESD70' DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP1 PROFILE DEVELOPER_D_1 ACCOUNT UNLOCK / The Sed command must look for the Line that contains TEMPORARY TABLESPACE and replace the immediate word... (4 Replies)
Discussion started by: rajan_san
4 Replies
Login or Register to Ask a Question