Sponsored Content
Top Forums Shell Programming and Scripting perl : replace multiline text between two marker points Post 302593112 by durden_tyler on Wednesday 25th of January 2012 04:58:20 PM
Old 01-25-2012
You could let Perl handle the intricacies of file manipulation. The command -

Code:
perl -i.bak -pe 'BEGIN {undef $/; $x="My multi-line\nstatic text\nover here"}
                  s/(---\+\+ Details\n).*?(\n---\+\+ More info)/$1$x$2/s
                 ' file1 file2 file3

creates backup files called "file1.bak", "file2.bak" and "file3.bak" for the original files "file1", "file2" and "file3" and then modifies them inline.

An example follows -

Code:
$
$ # check the original files
$
$ cat -n file1
   1  ---++ Title
   2  FILE1
   3
   4  ---++ Summary
   5  blah
   6
   7  ---++ Details
   8  Here is the multiline
   9  block
  10  of text I
  11  wish
  12  to
  13  replace that will
  14  be different
  15  in
  16  every file
  17
  18  ---++ More info
  19  blah
$
$ cat -n file2
   1  ---++ Title
   2  FILE2
   3
   4  ---++ Summary
   5  blah
   6
   7  ---++ Details
   8  Here is the multiline
   9  block
  10  of text I
  11  wish
  12  to
  13  replace that will
  14  be different
  15  in
  16  every file
  17
  18  ---++ More info
  19  blah
$
$ cat -n file3
   1  ---++ Title
   2  FILE3
   3
   4  ---++ Summary
   5  blah
   6
   7  ---++ Details
   8  Here is the multiline
   9  block
  10  of text I
  11  wish
  12  to
  13  replace that will
  14  be different
  15  in
  16  every file
  17
  18  ---++ More info
  19  blah
$
$ # run the Perl one-liner
$
$ perl -i.bak -pe 'BEGIN {undef $/; $x="My multi-line\nstatic text\nover here"}
                 s/(---\+\+ Details\n).*?(\n---\+\+ More info)/$1$x$2/s
                ' file1 file2 file3
$
$ # now check the modified files
$
$ cat -n file1
   1  ---++ Title
   2  FILE1
   3
   4  ---++ Summary
   5  blah
   6
   7  ---++ Details
   8  My multi-line
   9  static text
  10  over here
  11  ---++ More info
  12  blah
$
$ cat -n file2
   1  ---++ Title
   2  FILE2
   3
   4  ---++ Summary
   5  blah
   6
   7  ---++ Details
   8  My multi-line
   9  static text
  10  over here
  11  ---++ More info
  12  blah
$
$ cat -n file3
   1  ---++ Title
   2  FILE3
   3
   4  ---++ Summary
   5  blah
   6
   7  ---++ Details
   8  My multi-line
   9  static text
  10  over here
  11  ---++ More info
  12  blah
$
$ # and see if the original files were backed up
$
$ cat -n file1.bak
   1  ---++ Title
   2  FILE1
   3
   4  ---++ Summary
   5  blah
   6
   7  ---++ Details
   8  Here is the multiline
   9  block
  10  of text I
  11  wish
  12  to
  13  replace that will
  14  be different
  15  in
  16  every file
  17
  18  ---++ More info
  19  blah
$
$ cat -n file2.bak
   1  ---++ Title
   2  FILE2
   3
   4  ---++ Summary
   5  blah
   6
   7  ---++ Details
   8  Here is the multiline
   9  block
  10  of text I
  11  wish
  12  to
  13  replace that will
  14  be different
  15  in
  16  every file
  17
  18  ---++ More info
  19  blah
$
$ cat -n file3.bak
   1  ---++ Title
   2  FILE3
   3
   4  ---++ Summary
   5  blah
   6
   7  ---++ Details
   8  Here is the multiline
   9  block
  10  of text I
  11  wish
  12  to
  13  replace that will
  14  be different
  15  in
  16  every file
  17
  18  ---++ More info
  19  blah
$
$

You could use regular expressions while specifying the original files, and Perl takes care of resolving them, backing them up and editing them individually, e.g. in my case above, I could use -

Code:
perl -i.bak -pe 'BEGIN {undef $/; $x="My multi-line\nstatic text\nover here"}
               s/(---\+\+ Details\n).*?(\n---\+\+ More info)/$1$x$2/s
              ' file*

or

Code:
perl -i.bak -pe 'BEGIN {undef $/; $x="My multi-line\nstatic text\nover here"}
               s/(---\+\+ Details\n).*?(\n---\+\+ More info)/$1$x$2/s
              ' file?

tyler_durden
 

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Search and replace string between 2 points

I have a file that contains the following string. connect odemgr/bank123@odsd I am liiking to write a scrupt that will change the par of the string between the "/" and the "@" anyhelp qwould be greatly appriciated. (3 Replies)
Discussion started by: whited05
3 Replies

2. Shell Programming and Scripting

Multiline replace problem

I have a data of the form 0.0117843924 0. 0. 0. 0. 0.011036017 0. 0. 0. 0. 0.0103351669 0. 0. 0. 0. 4839.41211 0. 0. 0. 0. 4532.08203 0. 0. 0. 0. I would like to insert a couple of blank lines before the 4839 line, every time it appears. The numbers in the... (2 Replies)
Discussion started by: mathis
2 Replies

3. Shell Programming and Scripting

grep command to replace multiline text from httpd.conf file on Fedora

Hi, I am a newbie to shell scripting and to Linux environment as well. In my project I am trying to search for following text from the httpd.conf file <Directory '/somedir/someinnerdir'> AllowOverride All </Directory> and then remove this text and again rewrite the same text. The... (1 Reply)
Discussion started by: bhushan
1 Replies

4. UNIX for Dummies Questions & Answers

Replace a string within 2 points and save it

I've got this xml file <file1> some text here </file1> <file2> some text here </file2> How do I change the text in element file1 to a sentence that I want, defined by variable $sentence. using ksh here. (2 Replies)
Discussion started by: alienated
2 Replies

5. UNIX for Dummies Questions & Answers

[Solved] Vi - replace words with points (.)

Hello guys, I'm trying to replace the word "i.e." for "ie." in Vi but everytime I used the search tool for start looking for it (this is: /i.e.), it finds every word that contains the "i" and "e" word. I tried the following command: :%s/i.e./ie./g However, it doesn't work. Any help... (2 Replies)
Discussion started by: Gery
2 Replies

6. Shell Programming and Scripting

Replace/Remove not specific text in perl

Hello, Consider that i have many files that have the below format: file1 900 7777 1000 5 6 23 nnnnnnnnnnnnnnnnnn 1100 kkkkkkk file2 900 1989 1000 5 3 10 kkkdfdfdffd 1100 kkkkkkk What i would like to do is on every file to search the line that starts with... (4 Replies)
Discussion started by: chriss_58
4 Replies

7. UNIX for Dummies Questions & Answers

Perl one liner to replace text

Not quite a unix question but problem in a perl command. Taking a chance if someone knows about the error cat 1 a b c d perl -p -e 's/a/b/g' 1 b b c d What is the problem here?? perl -p -i -e 's/a/b/g' 1 Can't remove 1: Text file busy, skipping file. (2 Replies)
Discussion started by: analyst
2 Replies

8. Shell Programming and Scripting

How to replace word with multiline text using shell scripting.

Hi all I have data files which contain data as shown below: Line 5: FIDE INST_DESC: DIAM Co Ltd/Japan => MAID Co Ltd/Japan INST_NME: DIAM Co Ltd/Japan => MAID Co Ltd/Japan Line 6: FIDE INST_DESC: DIAM DL/Pimco US Bond Open Born in the USA => MAID DL/Pimco US Bond Open Born in the... (6 Replies)
Discussion started by: Ganesh_more
6 Replies

9. UNIX for Dummies Questions & Answers

UNIX multiline replace

Hi We have a database export file which needs to be formatted as below InputCreate view ABC1 as Locking ABC1 for Access select * from PQR Create view ABC2 as Locking ABC2 for access select * from PQR Create view ABC3 as Locking ABC3 for Access select * from PQR OutputCreate... (5 Replies)
Discussion started by: sheetal.arun
5 Replies
All times are GMT -4. The time now is 07:31 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy