sed 또는 Perl을 사용하여 점을 문자로 바꾸기

sed 또는 Perl을 사용하여 점을 문자로 바꾸기

이런 파일이 있어요

KN1234.1
KN2345.1
KN1233.1

을(를) 교체하고 싶습니다. v를 사용하면 다음과 같이 출력될 수 있습니다.

KN1234v1
KN2345v1
KN1233v1

후 . 항상 1이지만 KN 다음에는 최대 5자리까지 가질 수 있습니다. 이와 같은 것도 가능 KN14345.1하며 출력은 다음과 같아야 합니다.KN14345v1

sed 명령을 시도했습니다

sed 's/KN\d+.1/KN\d+v1/g' file.txt

하지만 아무 일도 일어나지 않았습니다. 이 문제를 어떻게 해결할 수 있나요?

Perl 솔루션도 높이 평가됩니다.

감사해요

답변1

이것:

sed 's/KN\d+.1/KN\d+v1/g' file.txt

귀하의 sed가 지원할 가능성이 없기 때문에 아무것도하지 않습니다\d (Perl에서 나온 것 같습니다) 아무 작업도 수행하지 않으므로 패턴이 아무것도 일치하지 않습니다. 다음을 참조할 수도 있습니다.내 정규 표현식이 X에서는 작동하지만 Y에서는 작동하지 않는 이유는 무엇입니까?

교체 부품에서 \d이스케이프 처리되기 때문에 원하는 대로 작동하지 않습니다.d+ 숫자가 교체됩니다.

Perl에서는 다음과 같은 것을 원할 수도 있습니다:

perl -pe 's/(KN\d+)\.1/$1v1/'  file.txt 

어디$1 점이 이스케이프됩니다.모든 문자. 또는

perl -pe 's/KN\d+\K\.1/v1/'  file.txt 

\K대체되지 않도록 일치의 이전 부분을 종료하는 위치입니다 .

점의 컨텍스트에 관심이 없다면 tr. (또는 tr///Perl에서).

관련 정보