adicione determinada string antes de cada 2 caracteres

0

Eu tenho a seguinte string:

AAAACE21

Gostaria de convertê-lo para: \xAA\xAA\xCE\x21 Basicamente eu quero adicionar \x no início de cada 2 caracteres. Por alguma razão, parece que sempre que eu tento percorrer a string e adicionar, o \ não termina aí. Existe algum forro que funcione?

    
por John 06.11.2017 / 08:10

2 respostas

3
$ echo AAAACE21 | sed 's/../\x&/g'
\xAA\xAA\xCE\x21

Em sed , . significa qualquer caractere, então .. corresponde a dois caracteres. Você geralmente precisa digitar \ para obter um \ , e & significa substituir pelo que foi correspondido.

O g representa g lobal; ou seja, faça o máximo possível, sempre que possível. Sem isso, você teria apenas os dois primeiros caracteres:

$ echo AAAACE21 | sed 's/../\x&/'
\xAAAACE21
    
por 06.11.2017 / 08:16
0

Aqui está uma solução usando o awk:

awk -v FS='' '{for(i=1;i<NF;i+=2) printf "\x%s%s",$i,$(i+1)}END{printf "\n"}' <<<"AAAACE21"
\xAA\xAA\xCE\x21

Defina o separador de campo ( FS ) como uma string vazia para delimitar o tamanho dos caracteres. Em seguida, imprima todos os dois caracteres precedidos pela string desejada. Para imprimir uma barra invertida literal, escape com uma barra invertida.

    
por 06.11.2017 / 08:20