"uid=" 패턴을 단일 문자로 한 번 이상 바꾸고 싶습니다. 그래서 저는 다음 명령을 사용합니다.
sed s/uid=.+/uid=something/g file
그러나 이것은 작동하지 않습니다. "한 문자 뒤에 한 번 이상"이 올바르지 않은 것 같습니다..+
이유를 아시나요?
답변1
BSD sed
또는 최신 버전의 GNU 및 busybox의 경우 sed
다음을 사용할 수 있습니다.
sed -E 's/uid=.+/uid=something/'
단일 문자를 한 번 이상 일치시킵니다.
활성화된 -E
플래그sed
확장 정규식. 그것 없이는 얻을 것이다기본 정규식. 두 정규식 구문 세트는 기본적으로 동일하지만 약간 다른 구문을 사용하며 확장 세트는 더 많은 연산자를 지원합니다.
이것은 대체됩니다
uid=110
그리고
uid=something
어울리고 싶다면동일한BSD용이 아닌 문자 sed
:
sed -E 's/uid=(.)\1*/uid=something/'
이것은 대체됩니다
uid=110
그리고
uid=something0
표준 ERE에는 역참조가 없습니다. GNU는 sed
이를 확장으로 지원하지만 BSD는 지원하지 않습니다 sed
. 그러나 역참조는 표준 BRE의 기능이므로 다음을 수행할 수 있습니다.
sed 's/uid=\(.\)\1*/uid=something/'
가지고 다닐 수 있는.
답변2
sed 's/uid=..*/uid=something/g' file
또는:
sed 's/uid=.\{1,\}/uid=something/g' file
posix sed의 경우