using sed/awk to replace a block of text in a file?


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting using sed/awk to replace a block of text in a file?
# 1  
using sed/awk to replace a block of text in a file?

My apologies if this has been answered in a previous post. I've been doing a lot of searching, but I haven't been able to find what I was looking for. Specifically, I am wondering if I can utilize sed and/or awk to locate two strings in a file, and replace everything between those two strings (including the strings themselves) with new text.

For example, lets say I have a file with the following text:

Code:
"The quick brown fox jumps over the lazy dog" is an English-language program, that is, a phrase that contains all of the letters of the alphabet. It has been used to test typewriters and computer keyboards.

And I want it to read like this:

Code:
"Then the quick onyx goblin jumps over the lazy dwarf" is an English-language program, that is, a phrase that contains all of the letters of the alphabet. It has been used to test typewriters and computer keyboards.

How do I go about replacing
Code:
"The quick brown fox jumps over the lazy dog"

with
Code:
"Then the quick onyx goblin jumps over the lazy dwarf"

? Any assistance would be appreciated. Thanks in advance.
# 2  
this can help you..
Quote:
sed 's/The quick brown fox/Then the quick onyx goblin/g' <filename
# 3  
Like this?
Code:
sed 's/The/Then the/;s/brown fox/onyx goblin/;s/dog/dwarf/' input_file

--ahamed
# 4  
Thank you for the replies. There was one thing though that I may have not been clear about. There would be times where everything in the middle of the two strings could be different. For example:

Code:
The quick brown fox.... dogs

or
Code:
The time to feed the .... dogs

or
Code:
The man ran for his life away from the dogs

In each case, what was between the words "The" and "dogs" is fluid. It could possibly be anything, and I wouldn't know beforehand. I need a mechanism that would look for the word "The" and the word "dog" and replace everything in between (including the word The and dog) with something else.

Does that make sense? If need be, I can give you a more specific example of what I am working with (a CSV) and what I am trying to do. Thanks again.
# 5  
Try
Code:
sed 's/The.*dog/whatever/' inputfile

EDIT: Note that .* will match the longest available string though, e.g.
Code:
# echo "The quick brown fox fell over the dog" | sed 's/The.*dog/whatever/'
whatever
# echo "The quick brown fox fell over the dog and some other dogs and cats" | sed 's/The.*dog/whatever/'
whatevers and cats

This User Gave Thanks to CarloM For This Post:
# 6  
Try the following to replace whatever you want in between "The" and the first occurrence of "dog":
Code:
# echo "The quick brown fox fell over the dog and some other dogs and cats" | perl -e '$x=<>;$x=~s/The.+?dog/whatever/;print $x'
whatever and some other dogs and cats

This User Gave Thanks to balajesuri For This Post:
# 7  
I've tried some suggestions with the real case I have, but I haven't had any success. Perhaps if I show you what I am working with it will make more sense. The following is a CSV file that I am working on:

Code:
 eDir Top N Report , logoRpt 
 All LAN Interface for ACCESS 
 Shown: Errors above 1.0 K or BW Util above 70.0 

  , Errors , BW Util 
  ,   , % 
  , Above , Above 
  ,  ,  
 Element , 1.0 K , 70.0 
 cat65-acomp-d,FastEthernet4/18 ,974787.00000000,0.03142596
 ios6-zdc-g2,TenGigabitEthernet6/4 ,887644.00000000,0.42693967
 ios6-dc-a,GigabitEthernet2/12 ,71172.00000000,12.59653282

What I am trying to make it look at is the following:

Code:
 Hostname,Interface,Number of Errors,Bandwidth Utilization
 cat65-acomp-d,FastEthernet4/18 ,974787.00000000,0.03142596
 ios6-zdc-g2,TenGigabitEthernet6/4 ,887644.00000000,0.42693967
 ios6-dc-a,GigabitEthernet2/12 ,71172.00000000,12.59653282

The bold parts are the items that are actually changing. So in this case, the report I run will always start with "eDir" and end with "70.0" (The second occurrence for those eagle eyed). I want that replaced with what is in the second example. Any chance on getting that to work? Thank you again for all your help, I do appreciate it.
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #630
Difficulty: Medium
According to Lifewire, as of November 1, 2018, a total of more than 3.2 billion iPhones had been sold.
True or False?

10 More Discussions You Might Find Interesting

1. Debian

Using awk and sed to replace text

Good Day Every one I have a problem finding and replacing text in some large files that will take a long time to manually edit. Example text file looks like this #Example Large Text File unix linux dos squid bind dance bike car plane What im trying to do is to edit all the... (4 Replies)
Discussion started by: linuxjunkie
4 Replies

2. Shell Programming and Scripting

Pattern replace from a text file using sed

I have a sample text format as given below <Text Text_ID="10155645315851111_10155645333076543" From="460350337461111" Created="2011-03-16T17:05:37+0000" use_count="123">This is the first text</Text> <Text Text_ID="10155645315851111_10155645317023456" From="1626711840902323"... (3 Replies)
Discussion started by: my_Perl
3 Replies

3. UNIX for Dummies Questions & Answers

Using sed to replace / in text file

Hi, I want to use sed to replace " /// " with "///" in a text file. However I am getting error messages when I use sed 's/ /// /////g' input.txt > output.txt. How do I go about doing this in sed? Input: 219518_s_at 0.000189 ELL3 / SERINC4 Output: 219518_s_at 0.000189 ELL3/SERINC4 (5 Replies)
Discussion started by: evelibertine
5 Replies

4. UNIX for Dummies Questions & Answers

Use sed to replace but only in a specific column of the text file

Hi, I would like to use sed to replace NA to x ('s/NA/x/g'), but only in the 5th column of the space delimited text file, nowhere else. How do I go about doing that? Thanks! (1 Reply)
Discussion started by: evelibertine
1 Replies

5. Shell Programming and Scripting

Delete first block of text with sed/awk

Hello, guys! "filename" has blocks with three lines each in this fashion: 93909286 #verified has one bug 10909286 #unverified pending 10909286 #unverified pendingThe above example has duplicate blocks, and I have tried using sed to remove just one block... The... (2 Replies)
Discussion started by: teresaejunior
2 Replies

6. Shell Programming and Scripting

How to replace multiple text in a file using sed

can anyone please help me in the below scenario: File1: Hello1 Hello1 i want to use sed to replace multiple occurances of Hello1 in file 1 to welcome. Thanks a ton for the help (9 Replies)
Discussion started by: amithkhandakar
9 Replies

7. Shell Programming and Scripting

text file search and replace with awk

hello all greeting for the day i have a text file as the following text.xml abcd<FIELD>123.456</FIELD>efgh i need to replace the value between <FIELD> and </FIELD> by using awk command. please throw some light on this. thank you very very much Erik (5 Replies)
Discussion started by: erikshek
5 Replies

8. Shell Programming and Scripting

replace block of text with content of another file

Hello, file1: not to be changed not to be changed <start> old stuff old stuff old stuff <end> not to be changed not to be changed file2: new text new text desired output: (3 Replies)
Discussion started by: ripat
3 Replies

9. Shell Programming and Scripting

pattern replace inside text file using sed

Hi, I have a situation where I want to replace some occurrences of ".jsp" into ".html" inside a text file. For Example: If a pattern found like <a href="http://www.mysite.com/mypage.jsp"> it should be retained. But if a pattern found like <a href="../mypage.jsp"> it should be changed to... (4 Replies)
Discussion started by: meharo
4 Replies

10. Shell Programming and Scripting

How to replace a range of text with sed or awk?

Howdy! I'm trying to automate editing of a configuration file (custom.conf for GDM). I need to find every line between a line that starts with "" and the next line that starts with "", I want to preserve that line, but then delete all the lines in that configuration section and then insert... (3 Replies)
Discussion started by: TXTad
3 Replies

Featured Tech Videos