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에서)을 사용하십시오.

관련 정보