Improve company productivity with a Business Account.Sign Up

x
?
Solved

Shell Script for addition ann run against multiple files

Posted on 2006-06-20
11
Medium Priority
?
352 Views
Last Modified: 2008-03-10
I have the following Shell Script  where it replacing old string/lines with new lines in a
file (actually it is a makefile)
The script works halfway though, , since when it encounters space or tab it does not replace old strings/lines

My question is using this K-Shell Script
                 1. how to take care space or tab fro the replacement ?
                  2. I want to add a new line (LINK = cc -G -mt -o) in all files  ?
                 3. I am running the script against one file

sed -f test.sed input.txt > output.txt



Instead how can I  run the script against all 100 files ( they are all same type makefile) ?

Following is the script I am using

!/bin/ksh
#
#The script substitute old lines with new lines in *.mak file

s/-D_HPUX_SOURCE -DFND_HPUX/-D__sun -DFND_SUN/
s/-Dfnd_hp -c -Aa $(DEBUG) +O2 +DS897/-Dfnd_sun \$(DEBUG) -c -Xa -O -xcg92 -xcode=pic32/
s/LINKFLAGS     =  -Wl,-B,immediate,+s,-q/#LINKFLAGS     =  -Wl,-B,immediate,+s,-q/
LINK = cc -G -mt -o/

#Run Syntax
#sed -f test.sed input.txt > output.txt

Thanks :)
0
Comment
Question by:dmshawkat
9 Comments
 
LVL 46

Expert Comment

by:Kent Olsen
ID: 16947755
Hi dmshawkat,

In the second line you need to escape the first $, too.   $(DEBUG)


Good Luck!
Kent
0
 
LVL 6

Expert Comment

by:JJSmith
ID: 16949402



ls -1 input* | while read infile                           # generate flist of filenames (could use find instead of ls)

do                                                                  # loop
   
    outfile=`echo $infile | sed s!input!output!`     # create output filename
 
    sed -f test.sed $infile > $outfile                     # edit contents  

done                                                               # end loop


OR if you want to overwrite original:

ls -1 input* | while read infile                           # generate flist of filenames (could use find instead of ls)

do                                                                  # loop
   
    sed -f test.sed $infile > /tmp/tempf$$           # edit contents  

    cp /tmp/tempf$$  $infile                               # overwrite original

done                                                               # end loop


Cheers
JJ
0
 
LVL 51

Accepted Solution

by:
ahoffmann earned 500 total points
ID: 16952149
s/-D_HPUX_SOURCE -DFND_HPUX/-D__sun -DFND_SUN/
s/-Dfnd_hp -c -Aa $(DEBUG) +O2 +DS897/-Dfnd_sun $(DEBUG) -c -Xa -O -xcg92 -xcode=pic32/
s/LINKFLAGS.*-B,immediate.*/#&/
s/LINK = cc -G -mt -o/your replacement here/

write above 4 line in file called test.sed, then
#Run Syntax
#sed -f test.sed input.txt > output.txt
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 

Author Comment

by:dmshawkat
ID: 16980516

Hello Dear
 I am getting following erra when runnining the replacement


sed: command garbled: s/LINKFLAGS      = -G -mt -o/LINKFLAGS      = -G -mt/

Any hlep would be greatly appraciated

Thanks
Shawkat
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 16981520
did you test my suggestion?
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 17555089
still believe in my suggestion ..
0
 
LVL 20

Expert Comment

by:Venabili
ID: 17555892
Hm.. I wondered a bit here :)
I will check it again but something is not quite ok for me... Just my gut probably but let me rethink
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 17556056
> .. is not quite ok for me ..
ok, may be the + needs to be escaped if you're using Gnu sed
but I assumed standard AT&T sed 'cause we're in Unix TA :-)
0
 
LVL 20

Expert Comment

by:Venabili
ID: 17556134
:)Yeah... :)

Time to change the recommendation... :)
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Let's say you need to move the data of a file system from one partition to another. This generally involves dismounting the file system, backing it up to tapes, and restoring it to a new partition. You may also copy the file system from one place to…
Installing FreeBSD… FreeBSD is a darling of an operating system. The stability and usability make it a clear choice for servers and desktops (for the cunning). Savvy?  The Ports collection makes available every popular FOSS application and packag…
Learn how to navigate the file tree with the shell. Use pwd to print the current working directory: Use ls to list a directory's contents: Use cd to change to a new directory: Use wildcards instead of typing out long directory names: Use ../ to move…
In a previous video, we went over how to export a DynamoDB table into Amazon S3.  In this video, we show how to load the export from S3 into a DynamoDB table.

585 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question