Sponsored Content
Top Forums Shell Programming and Scripting Change only first line of the match Post 302881506 by Don Cragun on Monday 30th of December 2013 02:53:21 AM
Old 12-30-2013
You are not at all clear!
In your original message in this thread you said you had a file named hostsocket.txt that contains:
Code:
leprechaun.2.uri.list=leprechaun2urilist
leprechaun.3.uri.list=leprechaun3urilist
leprechaun.4.uri.list=leprechaun4urilist
leprechaun.5.uri.list=leprechaun5urilist^
leprechaun.host.uri.list=raft://rt900test.info53.com:20025
leprechaun.1.uri.list=leprechaun1urilist
leprechaun.2.uri.list=leprechaun2urilist
leprechaun.8.uri.list=leprechaun8urilist
leprechaun.9.uri.list=leprechaun9urilist
leprechaun.host.uri.list=raft://11.1.120.154:20527,raft://10.1.182.2:21527
leprechaun.4.uri.list=leprechaun4urilist
leprechaun.5.uri.list=leprechaun5urilist
leprechaun.6.uri.list=leprechaun6urilist

and that after changing one line shown in blue above and below, it should look like:
Code:
leprechaun.2.uri.list=leprechaun2urilist
leprechaun.3.uri.list=leprechaun3urilist
leprechaun.4.uri.list=leprechaun4urilist
leprechaun.5.uri.list=leprechaun5urilist
leprechaun.host.uri.list=raft://rt950test.info53.com:21250
leprechaun.1.uri.list=leprechaun1urilist
leprechaun.2.uri.list=leprechaun2urilist
leprechaun.3.uri.list=leprechaun3urilist
leprechaun.4.uri.list=leprechaun4urilist
leprechaun.5.uri.list=leprechaun5urilist
leprechaun.6.uri.list=leprechaun6urilist
leprechaun.7.uri.list=leprechaun7urilist
leprechaun.8.uri.list=leprechaun8urilist
leprechaun.9.uri.list=leprechaun9urilist
leprechaun.host.uri.list=raft://11.1.120.154:20527,raft://10.1.182.2:21527
leprechaun.4.uri.list=leprechaun4urilist
leprechaun.5.uri.list=leprechaun5urilist
leprechaun.6.uri.list=leprechaun6urilist

But, in addition to the changes marked in blue, the stuff marked in red in the original file was removed and the stuff in red in the updated file was added.

There are lots of fairly simple ways to do what your English description says you want to do. Akshay provided an awk script that comes close to producing the output you showed in your sample from your sample input, if you change:
Code:
                             gsub(/[://].*:/,"://"RAFTIP,$0)
                             gsub(/[:0-9]*$/,":"RAFTPORT,$0)

in his script to:
Code:
                             sub("//.*", "//"RAFTIP":"RAFTPORT

except that it doesn't remove the trailing circumflex from the 4th line of the input file.

The following alternative awk script seems to transform your sample input into what you said your output should be:
Code:
awk -F'[.]' '
/[.^.]$/ {      # Get rid of trailing circumflex...
        $0=substr($0,1,length($0)-1)
}
/^leprechaun[.]host[.]uri[.]list=/ {
        if(found++ == 0) {
                # Change IP address and Port on 1st matching line...
                sub("//.*", "//" RAFTIP ":" RAFTPORT)
                # Set starting sequence number for following lines.
                seq = 1
        }
        print
        next
}
found == 1 && seq <= $2 {
        end = $2
        # Insert missing lines between values between 1st and 2nd matched lines.
        while(seq <= end) {
                gsub(/[0-9]+/, seq++)
                print
        }
        next
}
{       print
}' OFS=. RAFTIP="rt950test.info53.com" RAFTPORT="21250" hostsocket.txt

Due to the considerable discrepancies between your description of what this script should do and the sample input and output provided, Akshay's script and this script make LOTS of assumptions (although his script and my script make different assumptions) that might or might not be what you want.

If you want to try this on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk, /usr/xpg6/bin/awk, or nawk.

If you give us a clear description of what you're trying to do and sample input and output that match that description, you stand a much better chance of getting a solution to your problem that doesn't waste out time. (And please use CODE tags.)
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed - Replace Line which contains the Pattern match with a new line

I need to replace the line containing "STAGE_DB" with the line "STAGE_DB $DB # database that contains the table being loaded ($workingDB)" Here $DB is passed during the runtime. How can I do this? Thanks, Kousikan (2 Replies)
Discussion started by: kousikan
2 Replies

2. Shell Programming and Scripting

Script to change file contents line by line

Hi, I'm struggling to write a script to do the following, -will go through each line in the file -in a specific character positions, changes the value to a new value -These character positions are fixed througout the file ----------------------- e.g.: file1.sh will have the following 3... (4 Replies)
Discussion started by: vini99
4 Replies

3. Shell Programming and Scripting

Print Line if next line Match a pattern

Hi All, Does anyone know how to print 1H1A....... in peal script print line ^1H1A....... if next line equal 5R0RECEIPT.... Thank for help:D Cat st.txt 1H1A-IN-11-5410-0009420|1010047766|dsds|1|N|IN|IN|000000|1||N|<<<line match 5R0RECEIPT| 5R0RECEIPT|... (2 Replies)
Discussion started by: kittiwas
2 Replies

4. Shell Programming and Scripting

Delete line with match and previous line quoting/escaping problem

Hi folks, I've list of LDAP records in this format: cat cmmac.export.tmp2 dn: deviceId=0a92746a54tbmd34b05758900131136a506,ou=devices,ou=customer,ou=nl,o=upc cmmac: 00:13:11:36:a5:06 dn: deviceId=0a92746a62pbms4662299650015961cfa23,ou=devices,ou=customer,ou=nl,o=upc cmmac:... (4 Replies)
Discussion started by: tomas.polak
4 Replies

5. Shell Programming and Scripting

awk or sed? change field conditional on key match

Hi. I'd appreciate if I can get some direction in this issue to get me going. Datafile1: -About 4000 records, I have to update field#4 in selected records based on a match in the key field (Field#1). -Field #1 is the key field (servername) . # of Fields may vary # comment server1 bbb ccc... (2 Replies)
Discussion started by: RascalHoudi
2 Replies

6. Shell Programming and Scripting

I need to know how to replace a line after a pattern match with an empty line using SED

Hi How Are you? I am doing fine! I need to go now? I will see you tomorrow! Basically I need to replace the entire line containing "doing" with a blank line: I need to the following output: Hi How Are you? I need to go now? I will see you tomorrow! Thanks in advance.... (1 Reply)
Discussion started by: sags007_99
1 Replies

7. Shell Programming and Scripting

Match pattern1 in file, match pattern2, substitute value1 in line

not getting anywhere with this an xml file contains multiple clients set up with same tags, different values. I need to parse the file for client foo, and change the value of tag "64bit" from false to true. cat clients.xml <Client type"FIX"> <ClientName>foo</ClientName>... (3 Replies)
Discussion started by: jack.bauer
3 Replies

8. 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

9. Shell Programming and Scripting

awk to combine lines from line with pattern match to a line that ends in a pattern

I am trying to combine lines with these conditions: 1. First line starts with text of "libname VALUE db2 datasrc" where VALUE can be any text. 2. If condition1 is met then continue to combine lines through a line that ends with a semicolon. 3. Ignore case when matching patterns and remove any... (5 Replies)
Discussion started by: Wes Kem
5 Replies

10. Shell Programming and Scripting

Print next line beside preceding line on column match

Hi, I have some data like below: John 254 Chris 254 Matt 123 Abe 123 Raj 487 Moh 487 How can i print it using awk to have: 254 John,Chris 123 Matt,Abe 487 Raj,Moh Thanks. (4 Replies)
Discussion started by: james2009
4 Replies
All times are GMT -4. The time now is 02:38 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy