sed appending needed only after first instance


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed appending needed only after first instance
# 1  
Old 02-14-2011
sed appending needed only after first instance

Hi,
Here is my piece of code used with sed in shell script:
Code:
sed -i '/<falsemodule-option>/ a\<LdapLogin>' myxmlfile

The problem that i am facing with the above is that in 'myxml' file i have mulitple instances of
Code:
<falsemodule-option>

so when i execute the above sed command, it is appending the
Code:
<LdapLogin>

after every instance of
Code:
<falsemodule-option>

Please can some one help me to know if there is a way where i can append the text only after the first instance of the
Code:
<falsemodule-option>

and not after every instance of the
Code:
<falsemodule-option>

Thanks
# 2  
Old 02-14-2011
This should work:

Code:
sed s:\<falsemodule-option\>:\<falsemodule-option\>\<LdapLogin\>: myxmlfile

# 3  
Old 02-14-2011
Code:
sed -i '0,/<falsemodule-option>/ a\<LdapLogin>' myxmlfile

# 4  
Old 02-14-2011
I haven't tried either of these, but:
Quote:
Originally Posted by 47shailesh
This should work:

Code:
sed s:\<falsemodule-option\>:\<falsemodule-option\>\<LdapLogin\>: myxmlfile

While I can see this working if the file is all on one line I would have thought the result is the same as the original poster's problem.

Quote:
Originally Posted by yinyuemi
Code:
sed -i '0,/<falsemodule-option>/ a\<LdapLogin>' myxmlfile

This will append <LdapLogin> after every line until the first <falsemodule-option>.

I've tried doing things like this before and found no solution in sed. You either have to do something like:
Code:
sed -n 0,/<falsemodule-option>/ p < file
echo <LdapLogin>
sed 0,/<falsemodule-option>/ d < file

or use another tool like awk. And I hate awk, so I wouldn't normally recommend it Smilie

Andrew
# 5  
Old 02-14-2011
Code:
sed '0,/<falsemodule-option>/ {
/<falsemodule-option>/a\<LdapLogin>
}' file

awk is also a good way to try:

Code:
awk '/<falsemodule-option>/{p++} /<falsemodule-option>/ && p==1 {$0= $0"\n<LdapLogin>"}1'

This User Gave Thanks to yinyuemi For This Post:
# 6  
Old 02-14-2011
Quote:
Originally Posted by apmcd47
While I can see this working if the file is all on one line I would have thought the result is the same as the original poster's problem.
Yeah on multiple line code in my first reply will fail. However following appears to work in ksh:
Code:
sed '1s:\<falsemodule-option\>:\<falsemodule-option\>\<LdapLogin\>:'


EDIT: Checked this with example works only for line number specified Smilie .

Last edited by 47shailesh; 02-14-2011 at 05:41 PM.. Reason: correction
# 7  
Old 02-14-2011
Quote:
Originally Posted by sunrexstar
Hi,
Here is my piece of code used with sed in shell script:
Code:
sed -i '/<falsemodule-option>/ a\<LdapLogin>' myxmlfile

The problem that i am facing with the above is that in 'myxml' file i have mulitple instances of
Code:
<falsemodule-option>

so when i execute the above sed command, it is appending the
Code:
<LdapLogin>

after every instance of
Code:
<falsemodule-option>

Please can some one help me to know if there is a way where i can append the text only after the first instance of the
Code:
<falsemodule-option>

and not after every instance of the
Code:
<falsemodule-option>

Thanks


The following sed script will print in a loop after the first match:
Code:
sed '/pattern/{a\
new text here
:loop
n
b loop
}'

Or, using ed:
Code:
ed -s file <<'EOED'
/pattern/a
new text here
.
w
q
EOED

Greetings and regards to all,
Alister

Last edited by alister; 02-14-2011 at 06:56 PM.. Reason: Misunderstood problem.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed to grab first instance of a range

Hi all, I'm new to the forum and also relatively new to sed and other such wonderfully epic tools. I'm attempting to grab a section of text between two words, but it seems to match all instances of the range instead of stopping at just the first. This occurs when I use: sed -n... (7 Replies)
Discussion started by: Lazarix
7 Replies

2. Shell Programming and Scripting

sed for first instance of a pattern

Hi Everyone, I have the below information from a log file: LOAD SUMMARY ============ WRT_8036 Target: TGT_1_TAB (Instance Name: ) WRT_8039 Inserted rows - Requested: 3929 Applied: 0 Rejected: 3929 Affected: 0 Mutated from update: 3929 WRT_8041 Updated rows ... (7 Replies)
Discussion started by: galaxy_rocky
7 Replies

3. Shell Programming and Scripting

sed command to print first instance of pattern in range

The following text is in testFile.txt: one 5 two 10 three 15 four 20 five 25 six 10 seven 35 eight 10 nine 45 ten 50 I'd like to use sed to print the first occurance of search pattern /10/ in a given range. This command is to be run against large log files, so to optimize efficiency,... (9 Replies)
Discussion started by: uschaafm
9 Replies

4. Shell Programming and Scripting

help needed to put instance numbers

Hi All I need help am having a source file as below emp dept class subclass region country division first i need to get line count and i need to divide by 3 it is an parameter passing value number of lines 7 (8 Replies)
Discussion started by: ragu.selvaraj
8 Replies

5. UNIX for Dummies Questions & Answers

Help needed in Appending multiple lines

Hello, There is a log file A.log where new lines are getting added every minute. When ever any new lines are getting added in to A , the same lines needs to be appended to B.log I need to append these newly added lines to end of another file B through a shell script. I tried CAT but its... (2 Replies)
Discussion started by: twisterboy
2 Replies

6. Shell Programming and Scripting

Using sed can you specify the last instance of a character on a line?

I was told a way to do this with awk earlier today but is there a way with sed to specify the last instance of a character on a line? You will know what character you're looking for but there could be none or one hundred instances of it on a line say and you ONLY want to specify the last one for... (3 Replies)
Discussion started by: Bashingaway
3 Replies

7. Shell Programming and Scripting

sed: how to limit pattern search to first instance only

I need to reduce a file's size below 50MB by deleting chucks of text. The following sed does this. sed '/^begpattern/,/endpattern/d' myfile However, it's possible that the file size can get below 50MB by just deleting the first instance of the pattern. How do I code that into sed? Or can awk... (8 Replies)
Discussion started by: mariod1049
8 Replies

8. Shell Programming and Scripting

sed command - substitue first instance

hi i have one file where i want to substitute only first instance of swap with swap1 i want to replcae only first instance of swap in my script i know we can do this with awk. but i need to do this with sed only i tried follwoing code sed 's/swap/swap1' filename but here all... (15 Replies)
Discussion started by: d_swapneel14
15 Replies

9. Shell Programming and Scripting

Sed on first instance only

Hi, I've been trying to figure this one out and found a post about this on the forum here but the solution didn't seem to work for me. Basically what I have is a file that looks something like: stuff morestuff 0 otherthing 0 etc I want to substitute for the 0 but what I want to... (9 Replies)
Discussion started by: eltinator
9 Replies

10. Shell Programming and Scripting

sed replace 2nd instance

Hello, I want to replace 2nd instance of "foo" in a file use sed. Any suggestions? (2 Replies)
Discussion started by: katrvu
2 Replies
Login or Register to Ask a Question