scripts de shell de ubuntu linux que cambian el valor de una columna de una línea en un archivo de texto

scripts de shell de ubuntu linux que cambian el valor de una columna de una línea en un archivo de texto

Todo esto se está escribiendo en caso de que:

Caso 1:

 echo "${name}:${identity}:${hp}:$now:"0"" >> info.txt      # write to info.txt

entonces tendré algo como esto:Tom:8:987654:commission:0 # i assign it to 0 first

Caso 2:

echo -n "Enter employee's name:"
read name

S=`grep $name info.txt`;    

    if test -z $S 
then
echo "No details with employee name  $name"
else
echo "$S" | cut -d: -f4 // display 4th column.
echo 
echo -n "Enter hourly wage: "; read wage;
echo -n "Enter hours worked this week: "; read hours;

pay=$hours-40*$wage;          

echo -n "To update next payroll : press Y else N to go main menu: "     

read option
case "$option" in 
[Yy]*)  echo "Payroll have been updated."
    echo grep $name | sed -i s/\:*$/$pay/n info.txt //error         
    ;;
[Nn]*) 
    echo "Press Enter to view the Main"     
esac
fi

Mi archivo de texto se ve así:

Tom:8:987654:commission:0
Tommy:7:12379813:hourly:0
Fan:5:2132131:salaried:0

Estoy intentando reemplazar el valor de la última columna por $pay (no todas las columnas solo el nombre específico del usuario). Digamos que $pay es 10 y $name es Tommy.

Este es el archivo de texto esperado:

   Tom:8:987654:commission:0
    Tommy:7:12379813:hourly:10
    Fan:5:2132131:salaried:0

Pero recibí este error: sed: -e expression #1, char 15: unknown option tos'`

Lo estoy haciendo en la terminal de Ubuntu.

Respuesta1

Reemplace toda la línea:

sed -e "/$name/s/[0-9]*$/$pay/" -i info.txt

información relacionada