sed to do replace on line above


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed to do replace on line above
# 1  
Old 12-11-2011
Bug sed to do replace on line above

Hello,
I need to use sed to find a certain string and then do a replace on the line above. For example if I had the following text:


Code:
AAAAAAA
BBBBBBB
CCCCCCC
DDDDDD

I would like to find CCCCCCC, but I would like the replace to be carried out on BBBBBBB. I have done some searching and can only find instructions on deleting and inserting on lines other than the ones for which you are matching.

Do I need a delete and then a second sed for an insert or can it all be done in one sed?

Any suggestion welecome! Smilie

Last edited by zxmaus; 12-11-2011 at 11:57 PM.. Reason: added tags
# 2  
Old 12-11-2011
What is your search pattern? BBBB? Give a more realistic sample input and expected output...

--ahamed
# 3  
Old 12-11-2011
Ok, say I have this piece of XML:

Code:
<TERM>
<PARAM NAME="DATACENTER” OP="EQ"
VALUE="Data1"/>
<PARAM NAME="GROUP” OP="EQ” VALUE="GRP_04"/>
</TERM>
</TERMS>

I need to find <PARAM NAME="GROUP” OP="EQ” VALUE="GRP_04"/>

but update VALUE="Data1"/> (i.e. the line above)

I specifically have to only have to update:

VALUE="Data1"/> when it is followed by <PARAM NAME="GROUP” OP="EQ” VALUE="GRP_04"/>
, because there are many instances of VALUE="Data1"/> that I do want to update
in the XML, does that make sense?

in short I need to have a command to replace the line above my search string

Last edited by zxmaus; 12-11-2011 at 11:59 PM.. Reason: added tags
# 4  
Old 12-11-2011
Try this...
Code:
awk '/VALUE="Data1"\/>/{x=$0;getline;if($0~srch){print "whatever you want"}else{print x}}1' 
srch='<PARAM NAME="GROUP” OP="EQ” VALUE="GRP_04"/>' input_file

--ahamed
# 5  
Old 12-11-2011
Hello - thanks that works for the specific example. However I probably should have explained that the value above won't alway be:

Code:
VALUE="Data1"/>


it could be anything. That is why I want to search on:

Code:
<PARAM NAME="GROUP” OP="EQ” VALUE="GRP_04"/>


and replace the line above whatever it is.

Any further suggestions? Thanks

Last edited by zxmaus; 12-12-2011 at 12:00 AM.. Reason: added tags
# 6  
Old 12-11-2011
Try:
Code:
awk '{if(/CCCCCCC/)print t;else if(p)print p;p=$0}END{print p}' t=XXX infile

# 7  
Old 12-11-2011
Scrutinizer, thats perfect thank you. ahamed101 thanks for some good input.Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Replace values in script reading line by line using sed

Hi all, Let's say I have a script calling for the two variables PA_VALUE and PB_VALUE. for pa in PA_VALUE blah blah do for pb in PB_VALUE blah blah do I have a text file with two columns of values for PA and PB. 14.5 16.7 7.8 9.5 5.6 3.6 etc etc I would like to read this... (7 Replies)
Discussion started by: crimsonengineer
7 Replies

2. Shell Programming and Scripting

sed command to replace a line in a file using line number from the output of a pipe.

Sed command to replace a line in a file using line number from the output of a pipe. Is it possible to replace a whole line piped from someother command into a file at paritcular line... here is some basic execution flow.. the line number is 412 lineNo=412 Now i have a line... (1 Reply)
Discussion started by: vivek d r
1 Replies

3. Shell Programming and Scripting

Multiple line search, replace second line, using awk or sed

All, I appreciate any help you can offer here as this is well beyond my grasp of awk/sed... I have an input file similar to: &LOG &LOG Part: "@DB/TC10000021855/--F" &LOG &LOG &LOG Part: "@DB/TC10000021852/--F" &LOG Cloning_Action: RETAIN &LOG Part: "@DB/TCCP000010713/--A" &LOG &LOG... (5 Replies)
Discussion started by: KarmaPoliceT2
5 Replies

4. Shell Programming and Scripting

sed command to replace a line at a specific line number with some other line

my requirement is, consider a file output cat output blah sdjfhjkd jsdfhjksdh sdfs 23423 sdfsdf sdf"sdfsdf"sdfsdf"""""dsf hellow there this doesnt look good et cetc etc etcetera i want to replace a line of line number 4 ("this doesnt look good") with some other line ... (3 Replies)
Discussion started by: vivek d r
3 Replies

5. Shell Programming and Scripting

Replace line with sed on OS X

So, I want to, in a script, do an in-line replacement of a line in a file. Piece of cake in Linux with GNU sed. With OSX and BSD sed, not so much. I've been Googling, but nothing is really helping... either an answer is for a use case different enough from what I want to do, or it's something... (10 Replies)
Discussion started by: jnojr
10 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

sed to replace a line with modified line in same file

i have few lines in a file... i am reading them in a while loop so a particular line is held is $line1.. consider a modified line is held in $line2.... i want to replace $line1 with $line2 in the same file... how to do it..? i have come up till the below code sed "s/$line1/$line2/g" tmpfile.sql... (5 Replies)
Discussion started by: vivek d r
5 Replies

8. Shell Programming and Scripting

sed to replace <cr><cr><cr> in a line with <cr>

Hi, Please help me with the sed command for the following scenario: I've in abc.txt, asdasdada<cr>aasdsad<cr><cr>asdasdfsdfs<cr><cr><cr>asdsada<cr>adasd<cr>daasdaasd<cr><cr><cr> I want a sed command to do asdasdada<cr>aasdsad<cr>asdasdfsdfs<cr>asdsada<cr>adasd<cr>daasdaasd<cr> ... (13 Replies)
Discussion started by: skpvalvekar
13 Replies

9. Shell Programming and Scripting

How to replace one line with three in sed

Hi, I have a problem. I want to use SED to replace one line with three It looks like: PARAM='first_line,second_line,third_line' And in file: blablabla blablabla PARAM blablabla blablabla blablabla All I want is to change this into: blablabla blablabla first_line second_line... (6 Replies)
Discussion started by: ch0sen
6 Replies

10. 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
Login or Register to Ask a Question