Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Search and Replace Unix Shell Script

  1. Mar 24, 2009 #1
    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;
     
  2. jcsd
  3. Mar 24, 2009 #2

    Bill_B

    User Avatar
    Gold Member

    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.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Search and Replace Unix Shell Script
  1. Unix Shell Script (Replies: 3)

  2. UNIX scp script (Replies: 3)

  3. Unix / scripting help (Replies: 3)

Loading...