How to edit file sections that cross multiple lines?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to edit file sections that cross multiple lines?
# 1  
Old 01-13-2010
MySQL Needing help with searching and replace in a file (sed?)

Hello,

I'm wondering where I could go to learn how to edit file sections that cross multiple lines. I'm wanting to write scripts that will add Gnome menu entries for all users on a system for scripts I write, etc. I can search an replace simple examples with sed, but this seems more complex.

I am on a 'doz system in a hotel right now so I can't post the actual file, but the Gnome menu entry has a structure similar to this:

Code:
<Menu>
    <Name>Accessibility</Name>
    <Directory>Accessibility.directory</Directory>
    <Include>
      <And>
        <Category>Accessibility</Category>
        <Not><Category>Settings</Category></Not>
      </And>
    </Include>
    <Exclude>
      <Filename>dasher.desktop</Filename>
    </Exclude>
  </Menu>

Say I need to change the markups for the dasher.desktop file from <Exclude> to <Include> and </Exclude> to </Include>?

What If I wanted to add a new <Include></Include> section for a new .desktop file?

Compounding this is that there is variable whitespace indentation depending on how deep into the structure one needs to go and it would be nice to keep the formatting for readability and a nicer, more polished look.

Basically, what is the technique for finding something, and then modifying something on lines above and/or below it OR finding a section, and then adding something on a line below that section without modifying that line in the process.

I don't mind learning myself, but I need pointed in the right direction. I'm not sure where to start. This seems like a bit of a big job for sed. If someone would want to code an example, I'm up for that too as I can learn from that (hey, learning is fun, right?)

With thanks,
Narnie

Last edited by Narnie; 01-13-2010 at 01:57 AM..
# 2  
Old 01-13-2010
can you please post a sample o/p ?
# 3  
Old 01-13-2010
Quote:
Originally Posted by anchal_khare
can you please post a sample o/p ?
Please forgive me being abbreviation challenged here, but what is mean by a sample o/p? What does the o/p stand for? Smilie

Thanks,
Narnie
# 4  
Old 01-13-2010
output : )
# 5  
Old 01-13-2010
Ah, OK. Now I feel dumb, hehe.

OK, from the code posted above, say I wanted to change it to this:

Code:
<Menu>
    <Name>Accessibility</Name>
    <Directory>Accessibility.directory</Directory>
    <Include>
      <And>
        <Category>Accessibility</Category>
          <Include>
            <Filename>dasher.desktop</Filename>
          </Include>
        <Not><Category>Settings</Category></Not>
      </And>
    </Include>
  </Menu>

I will also need to be doing the reverse. Taking this config in this reply, and converting it into the code first posted.

---------- Post updated at 06:44 PM ---------- Previous update was at 12:33 AM ----------

Quote:
Originally Posted by anchal_khare
output : )
Output posted
# 6  
Old 01-26-2010
Try This:

Code:
[jasonralph@shine[~]# sed 's/Include/Exclude/g' filein > fileout

And for the reverse:

Code:
[jasonralph@shine[~]# sed 's/Exclude/Include/g' filein > fileout


You will need to redirect the output to a temporary file unless your sed version supports the -i option for edit in place.

If in place editing is available:

Code:
[jasonralph@shine[~]# sed -i 's/Include/Exclude/g' filein


Hope this is what you need.
jaysunn
# 7  
Old 01-28-2010
Quote:
Originally Posted by jaysunn
Try This:

Code:
[jasonralph@shine[~]# sed 's/Include/Exclude/g' filein > fileout

And for the reverse:

Code:
[jasonralph@shine[~]# sed 's/Exclude/Include/g' filein > fileout

You will need to redirect the output to a temporary file unless your sed version supports the -i option for edit in place.

If in place editing is available:

Code:
[jasonralph@shine[~]# sed -i 's/Include/Exclude/g' filein

Hope this is what you need.
jaysunn
Sadly, that won't work, because the location needs moved within the file, not just a simple changing of the <exclude> tags to <include> tags.

I have a feeling this gets into the sed buffer and reading into the buffer and changing it there then writing it out.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Edit lines in file preserving part of it

Hello: I have the following HTML table: <table> <thead> <tr> <th>Code</th> <th>Percentage</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>30%</td> </tr> <tr> <td>2</td> ... (3 Replies)
Discussion started by: Cacializ
3 Replies

2. Shell Programming and Scripting

Edit and replace the multiple values in a file in one iteration

Hi All, I am preserving OLD and NEW values and want to replace the values in one go instead of using multiple sed and mv commands. Please help. echo "\nEnter the new qStart time '${CODE}' - (Hit Enter for No Change): \c" read NEW echo "\nEnter the new qStop time '${CODE}' - (Hit Enter for... (2 Replies)
Discussion started by: sdosanjh
2 Replies

3. Shell Programming and Scripting

Removing multiple lines from input file, if multiple lines match a pattern.

GM, I have an issue at work, which requires a simple solution. But, after multiple attempts, I have not been able to hit on the code needed. I am assuming that sed, awk or even perl could do what I need. I have an application that adds extra blank page feeds, for multiple reports, when... (7 Replies)
Discussion started by: jxfish2
7 Replies

4. Shell Programming and Scripting

Need Help to Edit multiple column of a file

Hello Team, I want to know if there is any one liner command , using which I can edit multiple column of a file. input file input.txt (comma separated), taran, 12.45, uttam, 23.40, babay karan, 12.45, raju, 11.40, rahulg I want to update, 2nd and 4th column, but want all those column... (8 Replies)
Discussion started by: Uttam Maji
8 Replies

5. Shell Programming and Scripting

How to get awk to edit in place and join all lines in text file

Hi, I lack the utter fundamentals on how to craft an awk script. I have hundreds of text files that were mangled by .doc format so all the lines are broken up so I need to join all of the lines of text into a single line. Normally I use vim command "ggVGJ" to join all lines but with so many... (3 Replies)
Discussion started by: n00ti
3 Replies

6. Shell Programming and Scripting

swaping sections of lines

Is it possible to do this with sed? Go from this: 958211 XXYYXXYYXX file1 file2 file3 958897 XXYYXXYYXX file1 file2 To this: file1 file2 file3 XXYYXXYYXX 958211 file1 file2 XXYYXXYYXX 958897 The only thing consistant is XXYYXXYYXX. The numbers and files vary in length. I have seen I... (5 Replies)
Discussion started by: crowman
5 Replies

7. Shell Programming and Scripting

Edit number of lines in a file to single line

Greetings, I have a file: hostnames.txt which has - # cat hostnames.txt machine1 machine2 I need the output to be saved to a variable as: HOSTNAMELIST=machine1,machine2 Please advise. Thanks, Chiru (3 Replies)
Discussion started by: chiru_h
3 Replies

8. Shell Programming and Scripting

extract multiple sections of file

I have a file that I need to parse multiple sections from the file. The file contains multiple lines that start with ST (Abunch of data) Then the file contains multiple lines that start with SE (Abunch of data) SE*30*0001 ST*810*0002 I need all of the lines between and including these.... (6 Replies)
Discussion started by: rgentis
6 Replies

9. UNIX for Advanced & Expert Users

extract multiple sections of a file

I have a file that I need to parse multiple sections from the file. The file contains multiple lines that start with ST (Abunch of data) Then the file contains multiple lines that start with SE (Abunch of data) SE*30*0001 ... (1 Reply)
Discussion started by: rgentis
1 Replies

10. Shell Programming and Scripting

Handle Configuration File with same name of Parameter in multiple Sections

Hi I have a config file with multiple section and a parameter with the same name in each section. I need to read each parameter for distinct section. Parameter = 1 .... Parameter = 2 .... Parameter = 4 .... Tried this: grep -m1 '^*ProcessorsNumber' ServiceBrokerFramework.cfg |... (7 Replies)
Discussion started by: potro
7 Replies
Login or Register to Ask a Question