Visit Our UNIX and Linux User Community


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

Previous Thread | Next Thread
Test Your Knowledge in Computers #131
Difficulty: Easy
UNIX certification is based on the 'Single Unix Specification' which is an extension of IEEE 1003 (POSIX).
True or False?

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

Featured Tech Videos