Você deseja remover as execuções de 0
s, mas somente quando elas forem precedidas por dois pontos.
sed -e 's/:00*/:/g'
Como posso substituir / remover 0
neste, usando sed
:
2001:0db8:03cd:0000:0000:ef45:0006:0123
para que pareça assim:
2001:db8:3cd:::ef45:6:123
Existem 8 pedaços de 4's divididos por :
no meio.
A primeira parte de 4 não deve perder qualquer 0
e das outras, apenas os principais 0's podem ser removidos.
Você deseja remover as execuções de 0
s, mas somente quando elas forem precedidas por dois pontos.
sed -e 's/:00*/:/g'
Uma abordagem semelhante usando awk
:
awk '{gsub(/:0*/,":")}1' file
2001:db8:3cd:::ef45:6:123
Se você ainda estiver interessado em como remover qualquer zero, exceto os dos quatro primeiros dígitos, faça o seguinte:
sed 'H;g;s/\(\n\([^:]*\)\)*0*//g
' <<\IN
2001:0db8:03cd:0000:0000:ef0405:00060:0123
IN
2001:db8:3cd:::ef45:6:123
Ok, então isso corresponde globalmente a zero ou mais sequências de uma nova linha, seguidas por zero ou mais caracteres não-cólon, ou zero ou mais zeros. A primeira sequência é dividida em dois subgrupos - um que inclui o \n
ewline e outro que não. Aquele que faz é - mas o subgrupo que não o faz - e que o substitui - é
. Então, o caractere extra
\n
ewline é descartado. E quaisquer zeros correspondidos que não estão nessa sequência não são salvos em todos - e então eles também são removidos.
A nova linha só é recuperada em primeiro lugar com H
old - que acrescenta uma linha para manter espaço após um caractere \n
ewline (que sempre começa vazia) - e, em seguida, g
et - qual g
ets h
espaço antigo sobrescrevendo o espaço padrão.
sed -r '/^..../s/:0+/:/g'
está bem? (Resposta melhorada de Gilles que mantém intocado os primeiros 4 caracteres)
Tags text-processing sed shell