
이런 파일이 있어요
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에서).