sed encontrar substituir problema

0

Eu quero substituir

headers['Content-Disposition'] = "attachment; filename=%s" % (filename)

com

headers['Content-Disposition'] = 'attachment; filename="%s"' % (filename)

(para que o "% s" seja citado duas vezes).

Meu melhor esforço até agora é

sed -i -e 's/"headers[\'Content-Disposition\'] = \"attachment\; filename=%s\" % \(filename\)"/"headers[\'Content-Disposition\'] = \'attachment\; filename=\"%s\"\' % \(filename\)"/g' test.txt

mas falha:

sed: -e expression #1, char 33: unterminated 's' command

Eu tentei tudo o que pude encontrar em stackoverflow e em outros lugares. Eu tentei escapar das citações também. Mas isso muito de aspas simples e duplas está causando erros.

Eu examinei a linha e tenho certeza de que não deixei nenhuma referência não terminada. Como posso fazê-lo funcionar?

    
por SelvaPrasad A 07.10.2016 / 04:31

4 respostas

0

Tente isto:

sed -i -e "s/headers\['Content-Disposition'\] = \"attachment; filename=%s\" % (filename)/headers\['Content-Disposition'\] = 'attachment; filename=\"%s\"' % (filename)/g" test.txt
    
por 07.10.2016 / 05:27
1

Você pode evitar "'citando o inferno'" colocando seus comandos sed em um arquivo. Então eles não estão sujeitos a cotações Bash, e você só precisa se preocupar com o que é significativo para sed :

#!/bin/sed -f

# Adjust this to match as much as you need
/headers\['Content-Disposition'\] = /{

# change all double-quotes to single
y/"/'/
# now double-quote the %s argument
s/%s/"&"/g

}
    
por 07.10.2016 / 10:27
0

Assumindo que input é um arquivo que contém os dados:

sed "y/\"/'/;s/%s/\"&\"/" input
    
por 07.10.2016 / 05:03
0

Embora já exista uma resposta aceita, eis outra variante (um pouco mais curta):

sed -r "s/\"([a-z])/'/; s/([a-z])\"/'/; s/=([^[:space:]]{2})/\"\"/" headers 
headers['Content-Disposition'] = 'attachment; filename"%s"' % (filename)

Você provavelmente poderia torná-lo ainda mais conciso, mas eu escolho dividir o sed em três partes distintas para torná-lo pelo menos um pouco mais legível!

sed --version
sed (GNU sed) 4.2.2
    
por 07.10.2016 / 08:15

Tags