sed를 사용하여 특정 구분 기호 뒤의 값을 바꾸는 Linux 쉘 스크립팅

sed를 사용하여 특정 구분 기호 뒤의 값을 바꾸는 Linux 쉘 스크립팅

나는 이것을 가지고있다 :

sed -e "/$name/s/[0-9]\:*$/$P/" -i sales_info.txt 

위의 내용을 사용하여 이것을 변경할 때 : 내 텍스트 파일 형식이름:아니요:아니요:유형:p

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

$name = Tom , $P = 55.5라고 가정

나는 이것을 얻습니다 :

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

하지만 $P를 55.5에서 41.5로 변경하려고 하면

그것은 된다

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

나는 시도했다 :

sed -e "/$name/s/\:[0-9]*$/\:$P/" -i sales_info.txt 

:0 이 0 보다 크면 전혀 변경되지 않습니다. 내가 이것을 위해 sed를 사용해야 한다고 가정합니다. 내가 :엉뚱한 위치에 놓았나 ? 이후 마지막 열 값을 변경하려고 합니다.:

답변1

댓글에 답변이 달렸습니다:

AFAIK : 여기서 이스케이프할 필요가 없습니다. 그러나 이후 . [0-9] 범위에 있지 않으면 [0-9]* 패턴은 55.5와 같은 소수와 일치하지 않습니다. [0-9.]*와 같은 것이 필요합니다. 즉 "/$name/s/: [0-9.]*$/:$P/"

관련 정보