답변:
sed 's/^\(ab\)*//' <in >out
그룹화해야합니다.
echo ababababtestab |
sed 's/^\(ab\)*//'
testab
그러나 일부 오래된 sed
s 는 잘 처리하지 못할 수 있습니다. 하위 표현식 복제는 BRE 의 POSIX 지정 기능이지만 일부 sed
는이를 제대로 지원하지 않습니다. 하지만 그 중 일부에서는 ...
echo abababtestab |
sed 's/^\(ab\)\1*//'
... 대신 작동 할 수 있습니다.
sed
1979 년경의 7th Edition조차도 그것을 지원했습니다. 그룹화를 처리하지 않으려면 열등한 모방이어야합니다.
\n*
했지만 지원 하지는 않았습니다 \n\{min,max\}
. \(...\)*
, 또는 \(...\)\{min,max\}
, 특정 구현의 의도하지 않은 결과로, 하위 표현식 및 역 참조에 따른 복제 및 간격 표현식을 모두 지원했습니다.
\(ab\)\1*
버전은 기본 가보로 작동 sed
하고 \(ab\)*
버전은 SuSv4 가보로 작동합니다 sed
. 적어도 내 빌드에는 해당됩니다. 분명히, 나는 musl lib C에 대해 내 가보 세트를 만들었으므로 그것이 다르게 행동 할 수 있다고 상상할 수 있습니다. 그러나 일반적으로 지정된 기능이 가보 SuSv4 가보 도구에서 작동하지만 기본 도구가 아닌 경우 개발자가 수행했기 때문입니다.
다른 sed
:
sed -e ':1' -e 's/^ab//;t1'
각 입력 줄마다 label을 설정 :1
한 다음 줄 시작 부분에서 s
ubstitution 을 수행 ab
합니다. 경우 s
ubstitution 성공적으로 t
레이블 추정 명령 분기 1
, 아니 때까지 일을 다시 ab
행의 시작에 나타난 패턴, 우리는 완료됩니다.
s/^ab//; t1
충분하다