Deleting a PARTICULAR word from a file using shell script

shell

Hi I am having a problem in deleting a particular set of words from a file using Shell script. Here goes my problem,
My file: group.dat
Sample lines
ADMIN
ADMINISTRATION
ADMINISTRATOR

My Script: groupdel.sh

#!/bin/sh
groupf="<pathtofile>/group.dat"
tmp="<pathtofile>/te"
delgrp()
{
        echo "Enter the group to be deleted"
        read gname
        echo "-------------------"
        for gn in `cat $groupf`
        do
                if [ "$gname" = "$gn" ]
                then
                        sed -e "s/$gname//g" $groupf > $tmp&&mv $tmp $groupf
                        echo "deleted group"
                        cat $groupf
                        exit 1
                fi
        done
}
echo "Welcome to Group delete wizard"
delgrp

Output:
Enter the group to be deleted

ADMIN

deleted group

ISTRATION
ISTRATOR

Problem: My problem is I dont want the script to delete ADMINISTRATION or ADMINISTRATOR but to delete only ADMIN, any help how to achieve it.
Thanks in Advance

Best Answer

#!/bin/sh
groupf="<pathtofile>/group.dat"
tmp="<pathtofile>/te"
delgrp()
{
    echo "Enter the group to be deleted"
    read gname
    echo "-------------------"
    sed -e "/^$gname[[:blank:]]/d" "$groupf" > "$tmp" && mv "$tmp" "$groupf"
    echo "deleted group $gname"
    cat "$groupf"
    return 0
}
echo "Welcome to Group delete wizard"
delgrp

Assuming that the group name is at the beginning of the line and there are other things on the line and you want to delete the whole line, use the regular expression and command as shown.

There's no need for a loop since sed will iterate over the lines of the file for free.

You should return from a function rather than exit from it. Zero means success. One indicates an error or failure.

Always quote variable names that contain filenames.