Search and Replace Unix Shell Script

  • Thread starter hunter108
  • Start date
I'm trying to write what is basically a search and replace script. Full disclosure: This IS a homework assignment, and my attempt is below. It is supposed to have a usage statement, which I think is pretty solid so far. The problem is at the end where I do that actual searching and replacing. I'm just getting the 'end of file unexpected' error, which because i am spoiled in my young programming life with gcc, g++, and java compilers that neatly tell you where the problem is, I don't really know what is going wrong.

I think that error means it is looking for something it can't find, right? What? A hint in the right direction, or even a chastisement for being a newbie would be helpful.

Thanks in advance if anyone helps.




#!/bin/sh

# a shell function to print and error message and exit the script
error_and_die ()
{
echo "$@" >&2
exit 1

}
# a shell function to print and error message and a usage message and
# to exit the script
error_and_die_with_usage ()
{
echo "$@" >&2
usage
exit 1
}

# a shell function to print a usage message
usage ()
{
echo "
change-lines [-n] -s search string -r replace string files ...

-n do not backup the original file
-s search string the search for this string
-r replace string replace the search string with this string
-h print this message
" >&2
}


backup_file=TRUE
search_string=
replace_string=

while :
do
case $1 in
-n)
backup_file=FALSE
;;
-s)
if [ ! "$2" ]
then
error_and_die_with_usage "Search String not specified with -s"
fi
search_string="$2"
shift
;;
-r)
if [ ! "$2" ]
then
error_and_die_with_usage "Search String not specified with -r"
fi
replace_string="$2"
shift
;;
-h)
usage
exit 0
;;
-?)
error_and_die_with_usage "This should help!"
;;
*)
break
;;
esac
shift
done

if [ ! "$search_string" -a ! "$replace_string" -a $# -eq 0 ]
then
error_and_die_with_usage "No Search String, Replace String, or file to edit entered."
fi

if [ ! "$search_string" -a ! "$replace_string" ]
then
error_and_die_with_usage "No Search or Replace String entered.
fi

if [ ! "$search_string" -a $# -eq 0 ]
then
error_and_die_with_usage "No Search String or file to edit entered."
fi

if [ ! "$search_string" ]
then
error_and_die_with_usage "No Search String entered."
fi

if [ ! "$replace_string" -a $# -eq 0 ]
then
error_and_die_with_usage "No Replacement String or file to edit entered."
fi

if [ ! "$replace_string" ]
then
error_and_die_with_usage "No Replacement String entered."
fi

if [ $# -eq 0 ]
then
error_and_die_with_usage "No file to edit entered."
fi

# here is where I am pretty sure I am getting the error.
for file in $*
do
backup=$1
if ( backup_file == TRUE )
then
cp $backup $backup.keep
fi
sed 's/$search_string/$replace_string/g' $backup
shift
done

exit 0;
 

Bill_B

Gold Member
40
0
You're missing a quote on one of your strings.

A piece of advice - use an editor with syntax highlighting. Doing so can help you avoid errors like that.
 

Related Threads for: Search and Replace Unix Shell Script

  • Posted
Replies
3
Views
7K
  • Posted
Replies
19
Views
4K
  • Posted
Replies
3
Views
1K
  • Posted
Replies
3
Views
9K
  • Posted
Replies
9
Views
2K

Physics Forums Values

We Value Quality
• Topics based on mainstream science
• Proper English grammar and spelling
We Value Civility
• Positive and compassionate attitudes
• Patience while debating
We Value Productivity
• Disciplined to remain on-topic
• Recognition of own weaknesses
• Solo and co-op problem solving
Top