bash script that replaces string in files to be used in cygwin

I just installed cygwin on my windows XP.  I want to write a bash script to find this "<!--<~~" string in all the jsp files and replace it with "<%" string.  Below is my attempt on the bash script and the errors I got. Note, it even complains about the mv command.  Can anyone help me? If you have the solution, please give me some explanation as well since I am new to shell programming. Thanks.

#!/bin/bash
# Filename: srTags.sh
# Find all jsp file
# Search for <!--<~~ tag and replace with <% tag in all jsp files found
# Search for ~~>--> tag and replace with %> tag

  OLDTAG1="<!--<~~"
  NEWTAG1="<%"
  OLDTAG2="~~>-->"
  NEWTAG2="%>"
 
  for FILE in 'find . -type f -name *.jsp -print';
  do
     sed -e 's/$OLDTAG1/$NEWTAG1/g' -e 's/$OLDTAG2/$NEWTAG2/g' $FILE > temp
     mv temp $FILE
  done
exit 0
#-------------END BASH ------------------------

Here are the errors:

[jvsaha] site > ./srTags.sh
sed: invalid option -- t
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
  -e script, --expression=script
                 add the script to the commands to be executed
  -f script-file, --file=script-file
                 add the contents of script-file to the commands to be executed
  -i[suffix], --in-place[=suffix]
                 edit files in place (makes backup if extension supplied)
  -l N, --line-length=N
                 specify the desired line-wrap length for the `l' command
  -r, --regexp-extended
                 use extended regular expressions in the script.
  -s, --separate
                 consider files as separate rather than as a single continuous
                 long stream.
  -u, --unbuffered
                 load minimal amounts of data from the input files and flush
                 the output buffers more often
      --help     display this help and exit
  -V, --version  output version information and exit

If no -e, --expression, -f, or --file option is given, then the first
non-option argument is taken as the sed script to interpret.  All
remaining arguments are names of input files; if no input files are
specified, then the standard input is read.

E-mail bug reports to: <email address removed>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
mv: invalid option -- t
Try `mv --help' for more information.
[jvsaha] site >


jvsahaAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
stefan73Connect With a Mentor Commented:
Hi jvsaha,
> for FILE in 'find . -type f -name *.jsp -print';
>   do
>      sed -e 's/$OLDTAG1/$NEWTAG1/g' -e 's/$OLDTAG2/$NEWTAG2/g' $FILE > temp
>      mv temp $FILE
>   done
> exit 0

You have a couple of glitches there:

> for FILE in 'find . -type f -name *.jsp -print';
You'll get 'find . -type f -name *.jsp -print' as a loop argument, and you need to quote your wildcards in find:
Use $( find . -type f -name "*.jsp" -print ) instead.

>sed -e 's/$OLDTAG1/$NEWTAG1/g' -e 's/$OLDTAG2/$NEWTAG2/g' $FILE > temp

The single quote mode does not expand shell variables. Use double quotes instead:
sed -e "s/$OLDTAG1/$NEWTAG1/g" -e "s/$OLDTAG2/$NEWTAG2/g" $FILE > temp

Also be careful with file name variables which may contain spaces. You can get undesired side effects, as a file name can be split in two.
You're on the safe side when you always use "$FILE" instead of $FILE.

Cheers,
Stefan
0
 
tfewsterConnect With a Mentor Commented:
It looks like you have single quotes (') round the find statement instead of backticks (`);  And "*.jsp" should be enclosed in double-quotes, as shown, so the shell doesn't expand it.

Apart from that, try putting "echo $FILE" in just before the `sed...` line, to make sure the `find` isn't returning a dodgy filename, eg -- t
0
 
jvsahaAuthor Commented:
Tried what Stefan said & it worked.  However for those directories with space in their name, it doesn't work.  Is there a way to take care of this problem?

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.