Visit Our UNIX and Linux User Community


search and replace, when found, delete multiple lines, add new set of lines?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting search and replace, when found, delete multiple lines, add new set of lines?
# 1  
Old 11-23-2011
search and replace, when found, delete multiple lines, add new set of lines?

hey guys,

I tried searching but most 'search and replace' questions are related to one liners.

Say I have a file to be replaced that has the following:

Code:
$ cat testing.txt
TESTING
AAA
BBB
CCC
DDD
EEE
FFF
GGG
HHH
ENDTESTING

This is the input file:

Code:
$ cat input.txt
RRR
SSS
TTT

What I want to do is, search testing.txt for "EEE". When I find "EEE", I want to delete "EEE" and two lines below it ending in "GGG". I want to replace "EEE" through "GGG" with the input.txt file. So the ending results will look like:

Code:
$ cat testing.txt
TESTING
AAA
BBB
CCC
DDD
RRR
SSS
TTT
HHH
ENDTESTING

I know how to search for single lines of code and replace that line with something else.

How do I say "find this line, delete three lines down, replace it with text from this input file"?

thanks.

---------- Post updated at 02:39 PM ---------- Previous update was at 02:32 PM ----------

I spoke too soon. I did find this post:

It's the very last post of the thread. I'll try that.

Sorry, this should have been in the "Dummies" subforum too. Smilie
# 2  
Old 11-23-2011
Code:
nawk 'FNR==NR{f2[++f2c]=$0;next} /^EEE$/{r=1}r && r<=f2c{$0=f2[r++]}1'  input.txt testing.txt

This User Gave Thanks to vgersh99 For This Post:
# 3  
Old 11-23-2011
Quote:
Originally Posted by vgersh99
Code:
nawk 'FNR==NR{f2[++f2c]=$0;next} /^EEE$/{r=1}r && r<=f2c{$0=f2[r++]}1'  input.txt testing.txt

That is sick stuff vgersh99...unfortunately i forgot to tell you that my input.txt is a lot longer than 3 lines, say it's 6 lines, but I still don't want to overwrite the HHH.

Code:
$ cat input.txt
RRR
SSS
TTT
UUU
VVV

but I still want the "HHH". So this is more like a INSERT and not a overwrite. My bad.

Code:
$ cat testing.txt
TESTING
AAA
BBB
CCC
DDD
RRR
SSS
TTT
UUU
VVV
HHH
ENDTESTING

---------- Post updated at 04:25 PM ---------- Previous update was at 03:58 PM ----------

hey guys, actually i found a suggestion that solves one of my two problems.

Code:
Make a file, say my.sed, that contains:

s/^%%Page:.*/&\
added line 1\
added line 2\
added line 3\
added line 4/

Add more lines as needed. Then:

sed -f my.sed < infile.ps > outfile.ps

-Rouben Rostamian

I think my question is set. Thanks for looking everyone! Thanks vgersh99 for the sick one liner.
# 4  
Old 11-23-2011
Quote:
Originally Posted by DeuceLee
That is sick stuff vgersh99...unfortunately i forgot to tell you that my input.txt is a lot longer than 3 lines, say it's 6 lines, but I still don't want to overwrite the HHH.

Code:
$ cat input.txt
RRR
SSS
TTT
UUU
VVV

but I still want the "HHH". So this is more like a INSERT and not a overwrite. My bad.

Code:
$ cat testing.txt
TESTING
AAA
BBB
CCC
DDD
RRR
SSS
TTT
UUU
VVV
HHH
ENDTESTING

---------- Post updated at 04:25 PM ---------- Previous update was at 03:58 PM ----------

hey guys, actually i found a suggestion that solves one of my two problems.

Code:
Make a file, say my.sed, that contains:

s/^%%Page:.*/&\
added line 1\
added line 2\
added line 3\
added line 4/

Add more lines as needed. Then:

sed -f my.sed < infile.ps > outfile.ps

-Rouben Rostamian

I think my question is set. Thanks for looking everyone! Thanks vgersh99 for the sick one liner.
there's no limitation/hard-wiring on the number of lines to be inserted - everythig is driven by the content in your input.txt file. It should work for ANY number of lines.

Previous Thread | Next Thread
Test Your Knowledge in Computers #109
Difficulty: Easy
The Unix shell is the interface between the user and the kernel.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Delete multiple lines between blank lines containing two patterns

Hi all, I'm looking for a way (sed or awk) to delete multiple lines between blank lines containing two patterns ex: user: alpha parameter_1 = 15 parameter_2 = 1 parameter_3 = 0 user: alpha parameter_1 = 15 parameter_2 = 1 parameter_3 = 0 user: alpha parameter_1 = 16... (3 Replies)
Discussion started by: ce9888
3 Replies

2. Shell Programming and Scripting

Search a character and replace it with multiple lines

This is for AIX 6.1, I've a flat file and the format is like this DECLARE some statements; BEGIN some statements; END; I've to search BEGIN and replace it with the following 4 lines BEGIN For x in 1..1 LOOP BEGIN Similarly I've to search END and replace it with the... (7 Replies)
Discussion started by: Mukul Sharma
7 Replies

3. Shell Programming and Scripting

Deleting Multiple Lines in a File1 using critera found from File 2

Hi Everyone! I would like ask if there's a better way I can delete multiple lines in a file1 by collecting all criteria from file2. file1: a b c d e f file2: a e f The expected value will be: b (3 Replies)
Discussion started by: zzavilz
3 Replies

4. Shell Programming and Scripting

Delete a set of lines from a file

Hi All, Am very new for this Shell scripting. Could anyone pls let me know how to delete a set of lines from a (.DAT) file using ksh script. for example from line 3 to line 7. The size of the target file is huge:( ---------- Post updated at 11:01 PM ---------- Previous update was at 11:00 PM... (5 Replies)
Discussion started by: kasthu12
5 Replies

5. Shell Programming and Scripting

search and delete the lines in a file

HI group members I am new in unix I want to search # symbol in a file. if found need to delete the entire row in the file. need to move the actual data(with out # symbol data) to another file. Thanks (2 Replies)
Discussion started by: pmreddy
2 Replies

6. Shell Programming and Scripting

Print lines after the search string until blank line is found

All I want is to look for the pattern in the file...If I found it at # places... I want print lines after those pattern(line) until I find a blank line. Log EXAMPLE : MT:Exception caught The following Numbers were affected: 1234 2345 2346 Error java.lang.InternalError:... (3 Replies)
Discussion started by: prash184u
3 Replies

7. Shell Programming and Scripting

Search in a set of lines using perl

Hi Experts, i am beginner in perl and need your help to find a solution.. I have a block of multiple lines like below say module 1 to module 100 ***** MAKING > module1 ************** kvmfkvmmfdv svksmnvlksmfvks dcsdvcs sddvcsv ssvsdvdf error: abcdefghi wrw wvsv dsvds sdvsd error:... (5 Replies)
Discussion started by: ganga.dharan
5 Replies

8. Shell Programming and Scripting

Multiple lines into one line when ; is found

I have sql's in a file separated by ";", need to put the sql in one single line till i find a ";" The input file is like this SELECT s.sid, s.serial#, p.spid as "OS PID", s.username, s.module, ... (6 Replies)
Discussion started by: ilugopal
6 Replies

9. Shell Programming and Scripting

search 2 lines and delete above line

Hi, I've been searching in this forum for the last 4 hours trying to do one thing: search 2 lines and delete the above line. So far I have not be able to find something similar in this forum, so I need help. This is what I'm trying to do. For example, I have a file called file1: file1 word1... (4 Replies)
Discussion started by: shamushamu
4 Replies

10. Shell Programming and Scripting

Delete a block of text delimited by blank lines when pattern is found

I have a file which contains blocks of text - each block is a multi-lines text delimited by blank lines eg. <blank line> several lines of text ... pattern found on this line several more lines of text ... <blank line> How do you delete the block of text (including the blank lines) when... (17 Replies)
Discussion started by: gleu
17 Replies

Featured Tech Videos