Search and Replace Unix Shell Script

Click For Summary
SUMMARY

The discussion centers on creating a Unix shell script for search and replace functionality. The user encounters an 'end of file unexpected' error, primarily due to missing quotes in the script. The script includes functions for error handling and usage instructions, but issues arise in the loop where the actual search and replace operation is performed using the 'sed' command. The user is advised to utilize an editor with syntax highlighting to prevent such errors.

PREREQUISITES
  • Basic knowledge of Unix shell scripting
  • Familiarity with the 'sed' command for text manipulation
  • Understanding of shell script error handling techniques
  • Experience with command-line argument parsing in scripts
NEXT STEPS
  • Learn advanced 'sed' usage for complex text replacements
  • Explore error handling best practices in shell scripts
  • Study command-line argument parsing techniques in Bash
  • Investigate text editors with syntax highlighting features for scripting
USEFUL FOR

Students learning shell scripting, developers creating automation scripts, and anyone interested in text processing using Unix commands.

hunter108
Messages
1
Reaction score
0
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;
 
Technology news on Phys.org
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.
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
Replies
16
Views
4K
  • · Replies 4 ·
Replies
4
Views
6K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 11 ·
Replies
11
Views
2K
  • · Replies 19 ·
Replies
19
Views
4K
  • · Replies 75 ·
3
Replies
75
Views
7K