Sed remove todas as correspondências de padrão iniciais da linha

9

Eu tenho a seguinte linha:

abababtestab

Estou tentando descobrir uma expressão sed para remover todas as ocorrências de ab do início da linha para que a linha transformada seja:

testab

Eu sinto que isso deve ser simples, mas eu realmente não sei nada sobre sed .

O que eu tenho até agora é:

sed 's/^ab//'

Mas isso apenas remove a primeira ocorrência de ab.

    
por Dan 08.07.2015 / 15:57

2 respostas

14
sed 's/^\(ab\)*//' <in >out

Você deve agrupá-lo.

echo ababababtestab |
sed 's/^\(ab\)*//'
testab

Alguns mais antigos sed s talvez não lidem com isso muito bem. Embora a duplicação de subexpressão seja um recurso especificado por POSIX do BRE, alguns sed s don suportá-lo adequadamente. Em alguns desses, embora ...

echo abababtestab |
sed 's/^\(ab\)*//'

... pode funcionar em vez disso.

    
por 08.07.2015 / 15:58
6

Outro sed :

sed -e ':1' -e 's/^ab//;t1'

Com cada linha de entrada, configuramos um rótulo :1 , em seguida, fazemos s ubstitution ab no início da linha. Se s ubstitution tiver êxito, t est ramificação de comando para rotular 1 , refazer o trabalho até que nenhum padrão ab apareça no início da linha, pronto.

    
por 08.07.2015 / 16:11

Tags