우분투 리눅스 쉘 스크립트는 텍스트 파일의 한 줄의 열 값을 변경합니다.

우분투 리눅스 쉘 스크립트는 텍스트 파일의 한 줄의 열 값을 변경합니다.

이 모든 내용은 다음과 같은 상황에서 작성되었습니다.

사례 1:

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

그래서 나는 다음과 같은 것을 가질 것입니다 :Tom:8:987654:commission:0 # i assign it to 0 first

사례 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

내 텍스트 파일은 다음과 같습니다.

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

마지막 열 값을 $pay(모든 열이 아니라 사용자의 특정 이름만)로 바꾸려고 합니다. $pay는 10이고 $name은 Tommy라고 가정하겠습니다.

예상되는 텍스트 파일은 다음과 같습니다.

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

그런데 다음 오류가 발생했습니다: sed: -e expression #1, char 15: unknown option tos'`

우분투 터미널에서 하고 있어요.

답변1

전체 줄 바꾸기:

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

관련 정보