Como obter sed para substituir todos, exceto um caractere

0

Eu tenho uma declaração do formulário atPhysAddress[1][1.10.0.0.98] i gostaria de remover todos os detalhes, exceto o primeiro no segundo colchete, ou o valor que cai lá, como posso conseguir isso? (ou seja, eu gostaria de apenas deixar o primeiro inteiro no segundo colchete)

    
por sosytee 20.09.2013 / 13:15

2 respostas

1

Por exemplo, com

$ echo "atPhysAddress[1][1.10.0.0.98]" | sed 's/\(\[.*\]\)\[\(.\).*\]/[]/'
atPhysAddress[1][1]

Para obter apenas o primeiro número no segundo colchete:

$ echo "atPhysAddress[1][12.10.0.0.98]" | sed 's/.*\]\[\([^.]*\).*\]//'
12
    
por enzotib 20.09.2013 / 14:23
0

Você poderia fazer algo como

sed -r 's/\[([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\]/[XX..XX.XX.XX]/'

que corresponde a [ seguido por uma sequência de 5 inteiros separados por pontos seguidos por ] e, em seguida, retorna novamente o segundo (com XX marcando os removidos - opcional, é claro). O uso da opção -r torna a expressão mais fácil de ler, mas você pode reescrevê-la no POSIX sed se o GNU sed não estiver disponível. Ao alterar \ 2 para \ 1, \ 3, \ 4 etc., você pode escolher o número a ser substituído novamente.

echo "atPhysAddress[1][1.10.0.0.98]" | sed -r 's/\[([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\]/[XX..XX.XX.XX]/'
atPhysAddress[1][XX.10.XX.XX.XX]
    
por steeldriver 20.09.2013 / 14:58