Modify shell script to find and replace text strings in file

I have the following script:

#!/bin/bash
for i in /DVMAXMWL/*.xml
do
java -jar /securePACS/dcm4chee-2.15.0-mysql/bin/editmwl.jar -a -f $i
wait
mv $i $i.parsed
done

Open in new window


After the "for i" and before the file is sent to the command "java", I would like to search the file for a string of text and replace the string of text.  I may need to do this multiple times.  Can someone provide an example of how this could be done?

Thanks!
hypervisorAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
ozoConnect With a Mentor Commented:

perl -i.bak -pe 's/ay/CR/g;s/search2/replace2/g;s/search3/replace3/g' $i
0
 
ozoCommented:
perl -i.bak -pe 's/text/replace/g' $i
0
 
hypervisorAuthor Commented:
How does that fit into the script I already posted?
0
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

 
ozoCommented:
After the "for i" and before the file is sent to the command "java"
0
 
hypervisorAuthor Commented:
I'm trying this but it doesn't work - replaced "text" with text to  find and "replace" with text we want to replace.

#!/bin/bash
for i in /DVMAXMWL/*.xml
perl -i.bak -pe 's/Performing^Physician/null/g' $i
do
java -jar /securePACS/dcm4chee-2.15.0-mysql/bin/editmwl.jar -a -f $i
wait
mv $i $i.parsed
done

Open in new window

0
 
farzanjCommented:
Interchange lines 3 and 4.  

do should come immediately after for
0
 
ozoCommented:
In a regular expression,  ^ matches the start of the line, but -p reads a line at a time, so there will never be a start of a line there.
If you want to match a literal ^ you can quote it with \^
also, the do is part of the for i, so the command should be inside the do
0
 
ozoCommented:
In a regular expression,  ^ matches the start of the line, but -p reads a line at a time, so there will never be a start of a line there.
If you want to match a literal ^ you can quote it with \^
also, the do is part of the for i, so the command should be inside the do
0
 
hypervisorAuthor Commented:
In this instance,  I am trying to replace "ay" with "CR" - it didn't work.  Thoughts?

#!/bin/bash
for i in /DVMAXMWL/*.xml
do
perl -i.bak -pe 's/ay/CR/g' $i
java -jar /securerad/dcm4chee-2.17.0-mysql/bin/editmwl.jar -a -f $i
wait
mv $i $i.parsed
done

Open in new window

0
 
ozoCommented:
what was in the file before the s/ay/CR/ and what was in the file after the s/ay/CR/ ?
0
 
hypervisorAuthor Commented:
"ay" was in the file before and "ay" was in the file after.

The actual line of text which includes "ay" reads -

Modality=ay

We wan't to replace with CR
0
 
hypervisorAuthor Commented:
Actually, the following script works:
'
#!/bin/bash
for i in /DVMAXMWL/*.xml
do
perl -i.bak -pe 's/ay/CR/g' $i
java -jar /securerad/dcm4chee-2.17.0-mysql/bin/editmwl.jar -a -f $i
wait
mv $i $i.parsed
done

Open in new window


What if I want to run the following line many times do search and replace multiple strings?

perl -i.bak -pe 's/ay/CR/g' $i

Can I just keep repeating it?
0
 
hypervisorAuthor Commented:
What if it's not just a word, but a phrase:

i.e. "Schedule Procedure Step" - if I do single words it works, if I do phrases it doesn't.

Thanks!  Giving you points for this now.
0
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.

All Courses

From novice to tech pro — start learning today.