Eu consegui descobrir. Eis a resposta para futuras visitas à pergunta:
sed -r 's/(0[Xx][A-Fa-f0-9]+)\[([0-9]+)\]/ /g'
Eu tenho um banco de dados contendo uma lista de longs não assinados, representando um monte de endereços de memória, seguido por um deslocamento entre dois colchetes (por exemplo, Mem[offset]
, 0x2322AD4[3]
) e alguns outros dados. O que estou tentando alcançar é separar o deslocamento do endereço de memória, substituindo o colchete de abertura por um único espaço e me livrar do colchete de fechamento. O procedimento que estou tomando é o seguinte:
Os colchetes podem ser facilmente manipulados com os dois comandos a seguir:
sed 's/\[/ /' #replace the opening bracket with a single space.
sed 's/\]//' #delete the closing bracket
Mas, novamente, não quero mexer com os outros dados armazenados no banco de dados.
Meu segundo palpite foi voltar a referência para lidar com o trabalho. É possível dizer a sed
para encontrar cada dígito seguido por uma chave de abertura e fazer referência de volta ao dígito e adicionar um espaço logo após, resultando em algo como isto:
0x2322AD4 3]
Então eu posso ir em frente e usar o segundo comando mencionado acima para me livrar da chave de fechamento?
Se houver uma abordagem totalmente diferente para resolver o problema, por favor poste.
Acho que o que você está procurando é algo assim:
sed -r 's/(0[xX][[:xdigit:]]+)\[([[:digit:]]+)\]/ /g'
por exemplo:
$ sed -r 's/(0[xX][[:xdigit:]]+)\[([[:digit:]]+)\]/ /g' <<EOF
> mem+offset: 0x2322AD4[3] 0x232BEEF[12]
> unchanged: 0x22343AF word[2] 7E[word]
> EOF
mem+offset: 0x2322AD4 3 0x232BEEF 12
unchanged: 0x22343AF word[2] 7E[word]
$
Nota: sem o 0 [xX], ele teria considerado d [2] para ser substituível na segunda linha de entrada.
Tags sed regular-expression