Linux 쉘 스크립트는 sed를 사용하여 특정 구분 기호 뒤의 값을 바꿉니다.

Linux 쉘 스크립트는 sed를 사용하여 특정 구분 기호 뒤의 값을 바꿉니다.

나는 이것을 가지고있다:

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/"

관련 정보